我的字符串包含:
<pre code="...">some piece of code</pre> other non code content <pre code="...">some piece of code</pre> other non code content...
目标是将所有
<pre>code</pre>
替换为
<div style='background-color:black'>&<pre>code</pre>...
"code"
内的<pre>&</pre>
也应该用htmlspecialchars...
转义
我已经尝试了一些正则表达式模式,但没有成功。
一般来说,使用 RegEx 解析 HTML 是一个坏主意。 有很多简单的场景,RegEx 足以解决特定问题,这很棒。
我认为在你的情况下使用正则表达式是一个坏主意,它不能涵盖所有情况并且可能不安全。您可能正在尝试防止 XSS 漏洞,而基于正则表达式的解决方案总是容易出错。
但为了完整起见:
preg_replace_callback(
'/(<\\s*pre(?:\\s[^>]+)?>)(.*?)(<\\/\s*pre\s*>)/',
function ($match) {
return $match[1].htmlspecialchars($match[2]).$match[3];
},
$html
);