代码:
<div>
<font face="Arial, Verdana">
<span style="font-size: 13.3333px;">
<u>
Hello World
</u>
</span>
</font>
</div>
<div>
<font face="Arial, Verdana">
<span style="font-size: 13.3333px;">
<u>
Hello World2
</u>
<br>
</span>
</font>
</div>
<div>
<br>
</div>
<div>
<font face="Arial, Verdana">
<span style="font-size: 13.3333px;">
<u>
<br>
</u>
</span>
</font>
</div>
输出: - 我希望获得与下面给出的完全相同的输出
<div>
<font face="Arial, Verdana">
<span style="font-size: 13.3333px;">
<u>
Hello World
</u>
</span>
</font>
</div>
<div>
<font face="Arial, Verdana">
<span style="font-size: 13.3333px;">
<u>
Hello World2
</u>
<br>
</span>
</font>
</div>
<br>
<br>
以下是我的尝试:
$html = preg_replace("/<div.*?>.*?<br.*?>.*?<\/div>/", "", $html);
但它运作不正常。
请查看代码,并建议我如何在“div”标签下没有文字时,用“br”标签将“div”标签从其起始标签替换为相应的结束标签。如上面第二个“div”标签所示。
答案 0 :(得分:2)
使用domDocument来操作html结构
$doc = new DOMDocument();
$doc->loadHtml($pageHtml);
$x = new DOMXpath($doc);
foreach($x->query('//div[normalize-space(.) = ""]') as $div) {
$link= $doc->createElement('br');
$div->parentNode->replaceChild($link, $div);
}
echo $doc->saveHTML();
答案 1 :(得分:1)
我强烈建议使用DOM Manipulation来完成此任务。您可以使用正则表达式,可以使其他解决方案有效。但是,DOM操作是出于这个原因而创建的。
PHP中有很多DOM解析器的例子。有些比其他人慢。查看this SO post,了解DOM解析器潜在候选者的绝佳列表。
您可以随时使用正则表达式 - 但这是我个人使用正则表达式的条件:如果您从未计划向此添加任何其他功能。如果您计划添加更多,更改它,使您的脚本更通用等等,那么我会说不要使用RegEx。原因是你最终会得到一个巨大的,完全令人生畏的表达,或者你最终会得到许多小的“一次性”表达。引用DOM Parser中的函数所需的时间比找出正确的正则表达式要少。
编辑:
我删除了我的代码段 - Splash58's answer是一个更优雅的解决方案。他的例子使用原生PHP,其中9.9倍(更快,更高效,更多社区支持等)。