我想仅对< code>中的内容运行htmlentities()剥离的东西< / code>
我写了一个函数,它接受一个字符串并在< code>之间找到内容。 < /代码>
function parse_code($string) {
// test the string and find contents with <code></code>
preg_match('@<code>(.*?)</code>@s', $string, $matches);
// return the match if it succeeded
if($matches) {
return $matches[1];
}else {
return false;
}
}
// test the string and find contents with <code></code>
preg_match('@<code>(.*?)</code>@s', $string, $matches);
// return the match if it succeeded
if($matches) {
return $matches[1];
}else {
return false;
}
}
但是我需要一些实际运行htmlentities()的函数的帮助;关于&lt; code&gt;中的内容&LT; /代码&GT;然后将它们全部重新崩溃。例如,假设我们在下面有字符串。
<div class="myclass" rel="stuff"> things in here </div> <code> only run htmlentites() here so strip out things like < > " ' & </code> <div> things in here </div>
再一次,该函数需要保持字符串的所有内容相同,但只修改并运行&lt; code&gt;的内容上的htmlentities()。 &LT; /代码&GT;
答案 0 :(得分:5)
您可以使用自定义回调函数简化此操作:
$html = preg_replace_callback(
"@ (?<= <code>) .*? (?= </code>) @six",
"htmlentities_cb", $html
);
function htmlentities_cb($matches) {
return htmlentities($matches[0], ENT_QUOTES, "UTF-8");
}
匹配封闭代码标记的语法称为lookbehind and lookahead assertion。它简化了回调并避免了以后的implode(),因为断言匹配本身不会成为$ matches [0]的一部分。虽然@six用于case-insensitve标记匹配,但允许正则表达式中的空格使其更具可读性。