移除& lt; p>,, & lt; / p>使用DOM或正则表达式


Remove <p>&nbsp;</p> with DOM or regex

如何使用DOM或正则表达式删除此类型p标签<p>&nbsp;</p> ?

我也想像这样删除多个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操作的时候了;-)

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

如果您想使用xpath这样做(您的示例只是要求str_replace),您可以将&nbsp实体作为字符串(演示)查询:

$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));

如果你需要用xpath查询&nbsp;,希望这对你有帮助。

参见:使用XPATH搜索包含
的文本