在 DomDocument 中保留图像之间的换行符

Preserve line breaks between images in DomDocument

考虑这个 php 代码:

$content = '<img />'."\n\n".'<img />';
$doc = new DomDocument();
$doc->loadHTML($content);
echo $doc->saveHTML();

输出(包括包装 HTML/body 等)给我:

<img><img>

图像之间没有 space。

通话中:

$doc->preserveWhiteSpace = true;

没有任何改变。

如何保留原 HTML 中的白色 space?

HTML 中的空格已折叠。

您可以使用以下教程了解如何添加空格:

http://www.wikihow.com/Insert-Spaces-in-HTML

但在您的情况下,使用“<br><br>”而不是“\n\n”,您将获得 "line break" 个字符。

所有 HTML 实体(在上面链接的教程中进行了解释)都可以在此参考页面中找到:

https://dev.w3.org/html5/html-author/charref

请注意:您真的应该在页面的视觉方面使用 CSS,因此如果您只是想在图像之间留出间距,则使用边距之类的东西而不是 HTML 标签。

https://developer.mozilla.org/en/docs/Web/CSS/margin

您尝试过使用 nl2br 吗?

$doc->loadHTML(nl2br($content));

nl2br — Inserts HTML line breaks before all newlines in a string

回答我自己的问题 - 这是旧版本 libxml2 的错误行为:

https://bugs.php.net/bug.php?id=50278

This issue is solved by passing LIBXML_HTML_NODEFDTD as option when loading the document. This constant is available as of PHP 5.4.0 when libxml2 >= 2.7.8 is used. See http://3v4l.org/qs4TC.

我使用的共享服务器使用 2.7.6,所以不确定它是否对我有帮助,但我可以看看他们是否可以升级。希望这对其他人有帮助。