删除

 

与DOM或正则表达式

问题描述:

我如何删除使用DOM或正则表达式这种类型的p标签<p>&nbsp;</p>删除<p> </p>与DOM或正则表达式

我想将它删除多个P这样,

<p>&nbsp;</p> 
<p>&nbsp;</p> 
<p>&nbsp;</p> 

如果你想删除一个字符串,它正好,总是'<p>&nbsp;</p>',最简单和最快的解决方案可能是使用str_replace()

$new_string = str_replace('<p>&nbsp;</p>', '', $old_string); 

我不认为使用DOM 对于这样一个简单的例子有必要 - 和正则表达式是这里没有必要。


当然,如果你需要更换更复杂的东西,这不是DOM操作;-)

+0

没有正则表达式的解决方案总是快 – WooDzu

+0

如果线路是固定的,甚至额外的空间将打破它,甚至也不会改变输出。 –

+1

@WooDzu:正则表达式比简单的str_replace()快吗?不太确定。 –

preg_replace("|<p>&nbsp;</p>|", "", "<p>&nbsp;</p> 
<p>&nbsp;</p> 
<p>&nbsp;</p>"); 

总是一模一样的字符串......嗯,这将是一次在情况下,您喜欢做的是使用XPath(你的例子只是苛求str_replace不过),可以查询&nbsp实体作为字符串(Demo):

$html = '<body><p>&nbsp;</p> 
<p>&nbsp;</p> 
<p>&nbsp;</p> 
<p>Not empty :)</p> 
</body>'; 

$dom = new DomDocument(); 
$dom->loadhtml($html); 
$xpath = new DomXPath($dom); 
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]"); # &nbsp; 
foreach($col as $e) { 
    $e->parentNode->removeChild($e); 
} 
echo $dom->saveXML($dom->getElementsByTagName('body')->item(0)); 

希望,如果你需要查询&nbsp;使用XPath,这是有帮助的。

看得那么清楚:Using XPATH to search text containing