【问题标题】:Preserve line breaks between images in DomDocument在 DomDocument 中的图像之间保留换行符
【发布时间】:2016-04-19 04:47:53
【问题描述】:

考虑这个 php 代码:

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

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

<img><img>

图像之间没有空格。

调用:

$doc->preserveWhiteSpace = true;

不会改变任何东西。

如何保留原始 HTML 中的空白?

【问题讨论】:

    标签: php whitespace domdocument


    【解决方案1】:

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

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

    通过传递 LIBXML_HTML_NODEFDTD 作为选项解决了这个问题 加载文档时。这个常量在 PHP 中可用 使用 libxml2 >= 2.7.8 时为 5.4.0。见http://3v4l.org/qs4TC

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

    【讨论】:

    • 出现此错误时,所有类型的纯空格文本节点都会被删除,尽管 DOMDocument::preserveWhiteSpacetrue。这个解决方案修复了它(我有 libxml 2.9.4 和 PHP 7.1.9,Windows x64)。
    【解决方案2】:

    空白在 HTML 中被折叠。

    您可以通过以下教程了解如何添加空格:

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

    但在您的情况下,不要使用“\n\n”,而是使用“&lt;br&gt;&lt;br&gt;”,您将获得“换行符”字符。

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

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

    请注意:您确实应该在页面的视觉方面使用 CSS,所以如果您只是想要图像之间的间距,那么请使用边距之类的东西而不是 HTML 标记。

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

    【讨论】:

    • 我知道 HTML 是如何工作的。这与 DomDocument 的工作方式有关。例如,如果您使用'&lt;strong&gt;test&lt;/strong&gt;'."\n\n".'&lt;strong&gt;test&lt;/strong&gt;',DomDocument 会保留换行符。
    • 现在我明白你在说什么了。 DomDocument 用 HTML 解释字符串并创建节点对象。因此,在将 HTML 字符串输入到 DomDocument 时,它的所有格式都会被忽略。 preserveWhite 属性用于文本节点以避免&lt;span&gt; apple &lt;/span&gt; 折叠成&lt;span&gt;apple&lt;span&gt;,但它并非旨在保留装饰性换行符。请注意,有些情况下会忽略 preserveWhitespace stackoverflow.com/questions/9972112/…
    • 如果您的目标是让代码更具吸引力,您可能对 formatOutput 属性感兴趣 php.net/manual/en/…
    • 这不仅仅是装饰。它们之间没有空格的图像标签将在视觉上显示为感人。带有至少一个空白字符的图像标签将显示它们之间有空格。
    • 另外,保留空格也会保留非文本节点。例如,尝试:$content = '&lt;div class="test"&gt;&lt;/div&gt;'."\n\n".'&lt;div class="test"&gt;&lt;/div&gt;'; 进一步的测试表明它似乎只是带有自闭合标签的错误。
    【解决方案3】:

    您是否尝试过使用nl2br

    $doc-&gt;loadHTML(nl2br($content));

    nl2br — 在字符串中的所有换行符之前插入 HTML 换行符

    【讨论】:

    • 这将插入&lt;br/&gt; 标签。我不想改变 HTML 输出。
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2013-07-27
    • 2013-11-10
    • 2015-08-16
    • 2012-11-24
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多