我只想在不存在类属性的情况下从html中删除特定的<font>
标记。我已经尝试过使用下面的正则表达式:
/<font(.*?)>(.*?)<\/font>/
以及preg_replace()
,但在我的情况下它不起作用,因为标签有时是嵌套的。
例如:
<font>
<a><font class="junk"></font></a>
<font>
如果我运行正则表达式,它会变为:
<a><font class="junk"></a>
<font>
由于第二个<font>
标记上有一个类属性,因此不会删除该标记,并且可能会搞砸HTML。
我希望的结果如下:
<a><font class="junk"></font></a>
我希望<font>
代码只有在没有class
属性的情况下才能删除。
因此,我需要除了正则表达式以外的其他东西。我知道你不应该用正则表达式解析HTML(我知道Bobince写的是什么)。我也知道你可以加载DOMDocument。我从here得到的东西如下:
$dom = new DOMDocument();
然而,我见过的解决方案也剥离了标签之间的内容。我只想删除标签本身,但要保留内容。是否可以使用原生DOM?
答案 0 :(得分:2)
答案 1 :(得分:0)
抓住包含<font
...
请注意<font
的indexAt并删除其中的所有内容,直到之后的firstIndexOf >
。
(例如:
while(strpos($html,'<font')>-1 ) {
$removeFrom = strpos($html,"<font");
$removeTo = strpos($html,">",$removeFrom+1);
$html = substr($html,0,$removeFrom).substr($html,$removeTo);
}
然后只需使用</font>
str_replace('<\font>','',$html)
不像单个正则表达式那样光滑,但应该可以工作,只有几行实际代码。