我使用 strip_tags()
功能,但我需要删除一些标签(及其所有内容)。
例如:
<div>
<p class="test">
Test A
</p>
<span>
Test B
</span>
<div>
Test C
</div>
</div>
比方说,我需要去掉 P 和 SPAN 标签,只保留:
<div>
<div>
Test C
</div>
</div>
strip_tags
期望将您要保留的标签作为第二个参数。
在这个特定示例中,我可以使用 striptags($html, "<div>");
但是我正在抓取的 html 和需要删除的标签始终不同。
我搜索了几个小时来寻找适合我需要的功能,但找不到任何有用的东西。
有什么想法吗?
最佳答案
使用正则表达式。这样的事情应该有效:
$tags = array( 'p', 'span');
$text = preg_replace( '#<(' . implode( '|', $tags) . ')>.*?<\/$1>#s', '', $text);
demo显示它用任何东西替换了所需的标签。
请注意,您可能需要对其进行更多调整,例如,补偿标签内的空白或您的示例未展示的其他未知数。
这是用于捕获带有或不带有属性的标签的正则表达式:
'#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?<\/$1>#s'
关于PHP:strip_tags - 只删除某些标签(及其内容)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165895/