如何使用PHP DOMDocument saveHTML($ node)而不添加空格?

bil*_*oah 5 php domdocument

如果我使用saveHTML()没有可选DOMnode参数,它按预期工作:

$html = '<html><body><div>123</div><div>456</div></body></html>';
$dom = new DOMDocument;
$dom->preserveWhiteSpace = true;
$dom->formatOutput = false;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD);
echo $dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)
<html><body><div>123</div><div>456</div></body></html>
Run Code Online (Sandbox Code Playgroud)

但是当我添加一个DOMNode参数来输出文档的一个子集时,它似乎忽略了该formatOutput属性并添加了一堆不需要的空格:

$body = $dom->getElementsByTagName('body')->item(0);
echo $dom->saveHTML($body);
Run Code Online (Sandbox Code Playgroud)
<body>
<div>123</div>
<div>456</div>
</body>
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?这是一个错误吗?有解决方法吗?

Fat*_*ror 5

这是一个错误吗?

是的,这是一个错误,它在这里报道

有解决方法吗?

现在坚持使用Nigel的解决方案

他们修好了吗?

是的,从7.3.0 alpha3开始,这是一个固定的错误

检查它在这里


Nig*_*Ren 4

如果您知道您的文档也将是有效的 XML,您可以使用saveXML()...

$html = '<html><body><div>123</div><div>456</div></body></html>';
$dom = new DOMDocument;
$dom->preserveWhiteSpace = true;
$dom->formatOutput = false;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD);
$body = $dom->getElementsByTagName('body')->item(0);
echo $dom->saveXML($body);
Run Code Online (Sandbox Code Playgroud)

这使...

<body><div>123</div><div>456</div></body>
Run Code Online (Sandbox Code Playgroud)