Php 如何仅在<;上使用htmlspecialchars;代码></代码>;标签。

Php 如何仅在<;上使用htmlspecialchars;代码></代码>;标签。,php,htmlspecialchars,Php,Htmlspecialchars,我正在使用WordPress,希望创建一个函数,将PHP函数htmlspecialchars仅应用于标记之间包含的代码。我很感激这可能是相当简单的,但我是新的PHP,无法找到任何关于如何做到这一点的参考 到目前为止,我有以下几点: function FilterCodeOnSave( $content, $post_id ) { return htmlspecialchars($content, ENT_NOQUOTES); } 显然,上面的代码非常简单,在我页面的整个内容上执行htm

我正在使用
WordPress
,希望创建一个函数,将PHP函数
htmlspecialchars
仅应用于
标记之间包含的代码。我很感激这可能是相当简单的,但我是新的PHP,无法找到任何关于如何做到这一点的参考

到目前为止,我有以下几点:

function FilterCodeOnSave( $content, $post_id ) {
    return htmlspecialchars($content, ENT_NOQUOTES);
}
显然,上面的代码非常简单,在我页面的整个内容上执行htmlspecialchars。我需要将函数限制为仅应用于代码标记之间的HTML(每个页面上可能有多个代码标记)

任何帮助都将不胜感激

谢谢,
James

编辑:更新以避免多个代码标记

试试这个:

<?php

// test data
$textToScan = "Hi <code>test12</code><br>
    Line 2 <code><br>
    Test <b>Bold</b><br></code><br>
    Test
    ";

// debug:
echo $textToScan . "<hr>";


// the regex pattern (case insensitive & multiline
$search = "~<code>(.*?)</code>~is";

// first look for all CODE tags and their content
preg_match_all($search, $textToScan, $matches);
//print_r($matches);

// now replace all the CODE tags and their content with a htmlspecialchars() content
foreach($matches[1] as $match){
    $replace = htmlspecialchars($match);
    // now replace the previously found CODE block
    $textToScan = str_replace($match, $replace, $textToScan);
}

// output result
echo $textToScan;

?>
用于获取所有
标记

// in this example $dom is an instance of DOMDocument
$code_tags = $dom->getElementsByTagName('code');

if ($code_tags) {
    foreach ($code_tags as $node) {
        // [...]
    }
    // [...]
}

我知道这有点晚了,但是您可以先调用函数,然后在输出时调用函数

使用正则表达式来推断您想要的块。[/start.*?end/][1][1]:@NeilMasters-HTML标记不是简单的字符串,它们可以有属性,空格,不区分大小写…@Quentin一句古老的格言,你给regex带来的问题比它解决的要多:/谢谢,这更接近我想要的。我现在遇到了一个问题,每次保存我的文章时,
标记都是重复的,因此在保存3次后,我有3组代码标记,一行
这里的代码内容
。你知道为什么会发生这种情况,或者我如何避免它吗?我更新了答案。它现在没有生成多个代码标记。它不是生成
code
而是将
标记保留在原位。这就是你想要的吗?如果是,请接受答案。非常好。。。但是它不能处理
你能给出一个完整的解释吗?我使用
$dom=newdomdocument()尝试了它
然后
$dom->loadHTML('Hey
')”
。。。但是
$dom->textContent
是空的。。。