DOMDocument和hr标签丢失了HTML

时间:2018-03-20 09:04:26

标签: php domdocument

使用PHP和DOMDocument类解析来自TinyMCE编辑器的HTML。我在编辑器中插入<hr />元素时遇到问题,因为DOMDocument不断丢失剩下的代码。

# Input: <hr /><p>&nbsp;</p><p>test input</p>

$domDoc = new DOMDocument();
$domDoc->loadHTML($input, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
var_dump($domDoc->saveHTML());

// Result: <hr>

我找不到任何理由,loadHTML()也没有选择阻止这种情况。究竟发生了什么,我可以在这里使用hr元素吗?

2 个答案:

答案 0 :(得分:0)

答案如下:

substr($domDoc->saveHTML($domDoc->getElementsByTagName('body')->item(0)), 6, -7)

问题位于我给body节点的saveHTML中并解析了标签。现在我得到了完整的HTML。这也是一个单行解决方案。

答案 1 :(得分:0)

当DomDocument遇到未完全包装在单个元素中的HTML字符串时,似乎有问题。因此,如果您从以下内容开始:

-starttls smtp

然后将其读入DomDocument并使用DomDocument对象再次生成HTML,您将得到类似的内容:

<h1>My Title<h1><p>My text</p>

对于我的应用程序,解决方案是将整个内容包装到div中,然后再将其发送到DomDocument。这可以解决OP所发布的问题-如果有一个前置的hr标签,则将整个html字符串包装在div中将保留它和其余内容。