在 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 标签。
您尝试过使用 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,所以不确定它是否对我有帮助,但我可以看看他们是否可以升级。希望这对其他人有帮助。
考虑这个 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 标签。
您尝试过使用 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,所以不确定它是否对我有帮助,但我可以看看他们是否可以升级。希望这对其他人有帮助。