为什么初始 BR 会破坏 DOMDocument 输出?

Why does an initial BR break DOMDocument output?

以下内容破坏了 DOMDocument,因为在尝试从中获取 HTML 时仅输出 BR 标记。拥有初始 BR 标签有什么问题?

  $dom = new DOMDocument('1.0', 'utf-8');
  $dom->loadHTML("<br /><p>Here is some text!</p>", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  $value = $dom->saveHtml($dom->documentElement);
  print_r($value);

(上下文:清理使用所见即所得输入的文本。)

来自the docs

Represents an entire HTML or XML document; serves as the root of the document tree.

一个文档中不能有多个根元素。您刚刚遇到错误恢复。

将HTML改成这样,例如:

<p>Here is some text!</p><p>Test</p>

结果:

<p>Here is some text!<p>Test</p></p>

(第二段插入第一段)。

将内容包装在单个根元素中,例如 div,将解决您的具体问题:

<div><br><p>Here is some text!</p></div>

给出:

<div>
<br><p>Here is some text!</p>
</div>

也就是说,我怀疑您最好使用 HTML Purifier 来清理用户输入 HTML。