您可能没有意识到这一点,但DOMDocument可以帮助您修复HTML.
$html = "
Hello world
It's 7Am where I live
";
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML('' . $html . '',LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach( $xpath->query('//*[not(node())]') as $node ) {
$node->parentNode->removeChild($node);
}
echo substr($dom->saveHTML(),6,-8);
结果:< div>< h2> Hello world< / h2>< p>我住的地方是7Am< / p>< / div>
请注意,基于XPath的空节点清理是必要的,因为DOM包含空< h2>< / h2>,< p>< / p>和< div>< / div>将HTML加载到DOM后的标记.
< root>在开头添加元素以确保我们获得根元素.之后,我们可以使用substr进行后处理.
LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD标志是必需的,因此没有DTD和其他垃圾没有添加到DOM.