替换 <pre> HTML 文档中的包装内容

问题描述 投票:0回答:1

我的字符串包含:

<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...

转义

我已经尝试了一些正则表达式模式,但没有成功。

php regex dom replace html-parsing
1个回答
1
投票

一般来说,使用 RegEx 解析 HTML 是一个坏主意。 有很多简单的场景,RegEx 足以解决特定问题,这很棒。

我认为在你的情况下使用正则表达式是一个坏主意,它不能涵盖所有情况并且可能不安全。您可能正在尝试防止 XSS 漏洞,而基于正则表达式的解决方案总是容易出错。

但为了完整起见:

preg_replace_callback(
    '/(<\\s*pre(?:\\s[^>]+)?>)(.*?)(<\\/\s*pre\s*>)/',
    function ($match) {
        return $match[1].htmlspecialchars($match[2]).$match[3];
    },
    $html
);
© www.soinside.com 2019 - 2024. All rights reserved.