我用的是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);
该演示展示它什么也没有更换所需的标签。
请注意,您可能需要更多的调整,比方说,给标签,或者你的例子并不能说明其他未知之内弥补空白。
这里是用来捕获标签带或不带属性的正则表达式:
'#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?<\/$1>#s'
你说你正在使用简单的HTML DOM(好!这是解析HTML正确的方式)。 当我需要删除标记及其内容,我做的:
$rows = $html->find("span");
foreach ($rows as $row)
{
$row->outertext = "";
}
$html->load($html->save());
是必需的最后一行,因为DOM被后修饰,所以整个DOM已被折叠,然后再分析,这样的变化将成为永久性的困惑(IMO,在简单的HTML DOM中的错误)。
简单HTML DOM方法比正则表达式更安全,更稳定。