将DOMDocument中的特定元素导出为字符串

Cli*_*ive 8 html php domdocument

我正在DOMDocument使用该loadHTML()函数导入一些任意HTML ,例如:

$html = '<p><a href="test.php">Test</a></p>';
$doc = new DOMDocument;
$doc->loadHTML($html);
Run Code Online (Sandbox Code Playgroud)

然后我想使用DOMDocument我没有问题的方法更改一些属性/节点值.

一旦我做了这些更改,我就想导出HTML字符串(使用->saveHTML()),而不会自动添加到HTML中的<html><body>...标记DOMDocument.

我理解为什么要添加这些(以确保有效的文档),但是我如何才能将我编辑的HTML(特别是<body>标签之间的所有内容)都用到了?

我已阅读这篇文章,虽然它提供了一些解决方案,但我宁愿"正确"这样做,即不在<body>标签上使用字符串替换.HTML的有效性不是问题,因为它预先通过HTML净化器运行.

有任何想法吗?谢谢.

编辑

我知道在PHP 5.3.6中$node添加了参数saveHTML(),不幸的是我坚持使用5.2.

nic*_*ckb 4

也许这个源代码会有所帮助 - 他们正在使用正则表达式来删除不必要的字符串:

\n\n

http://beerpla.net/projects/smartdomdocument-a-smarter-php-domdocument-class/

\n\n
$content = preg_replace(array("/^\\<\\!DOCTYPE.*?<html><body>/si",\n                                  "!</body></html>$!si"),\n                            "",\n                            $this->saveHTML());\n\nreturn $content;\n
Run Code Online (Sandbox Code Playgroud)\n\n

saveHTMLExact() - DOMDocument 有一个设计极其糟糕的“功能”,如果您正在加载的 HTML 代码不包含<html><body>标签,它会自动添加它们(是的,没有标志可以关闭此行为)。

\n\n

因此,当您调用 $doc->saveHTML() 时,新保存的内容现在包含<html><body>DOCTYPE。当尝试使用代码片段时不太方便(XML 也有类似的问题)。

\n\n

SmartDOMDocument 包含一个名为 saveHTMLExact() 的新函数,它完全符合您的要求 \xe2\x80\x93 它保存 HTML,而不会像 DOMDocument 那样添加额外的垃圾。

\n\n

此外,其他问题也提出了类似的问题:

\n\n

如何在没有 HTML 包装器的情况下保存 DOMDocument 的 HTML?

\n