gpt4 book ai didi

php - 使用 HTMLPurifier 或正则表达式删除嵌套的 html 标签

转载 作者:行者123 更新时间:2023-11-28 03:14:17 25 4
gpt4 key购买 nike

我正在寻找一种方法来摆脱一些嵌套的 html 标签,并且已经花了一些时间来寻找这样做的正确方法。因为我已经在使用 HTML Purifier,所以我想找到一种使用它的方法,但也知道其他可能的解决方案(例如,在 PHP 中使用正则表达式的正确方法)会很棒:)

这是我拥有的 HTML 结构的示例:

<p><span><span>SOME TEXT</span></span></p>
<table><tbody><tr>
<td><span><span>SOME TEXT</span></span><span>SOME MORE TEXT</span></td>
<td><div><span><span>SOME TEXT</span></span></div><div><span>SOME MORE TEXT</span></div></td>
</tr></tbody></table>
<p>SOME TEXT</p>

我想得到这个输出:

<p><span><span>SOME TEXT</span></span></p>
<table><tbody><tr>
<td>SOME TEXT SOME MORE TEXT</td>
<td>SOME TEXT SOME MORE TEXT</td>
</tr></tbody></table>
<p>SOME TEXT</p>

所以我基本上想要的是一种删除嵌套在 td 标签中的所有 div 和 span 标签的方法,然后才删除。

是否有使用 HTML Purifier 实现此目的的方法,或者有人知道获得此结果的另一种方法吗?(我已经检查了 HTML Purifier 文档,但找不到只删除嵌套标签的方法)

非常感谢您的帮助。

最佳答案

如果您别无选择,那么最好的办法是预处理文本,用单个字符替换打开/关闭标签。这使得更改更容易执行,并且您的预处理可以相当轻松地展开(请原谅我几年没有做任何 php 的代码):

$str = preg_replace('/\&/', '&amp;', $str);
$str = preg_replace('/\@/', '&at;', $str);
$str = preg_replace('/\#/', '&hash;', $str);
$str = preg_replace('/\<td/', '@', $str);
$str = preg_replace('/\<\/td/', '#', $str);

while preg_match('/(\@[^\#]*)<[\/]?span[^\>]*>/', $str) {
$str = preg_replace('/(\@[^\#]*)<[\/]?span[^\>]*>/', '$1', $str);
}

$str = preg_replace('/\@/', '<td', $str);
$str = preg_replace('/\#/', '</td', $str);
$str = preg_replace('/\&hash;/', '#', $str);
$str = preg_replace('/\&at;/', '@', $str);
$str = preg_replace('/\&amp;/', '&', $str);

我在 JS 中有类似的东西来清理 HTML,希望这有帮助。

关于php - 使用 HTMLPurifier 或正则表达式删除嵌套的 html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28996056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com