【问题标题】:Have I misunderstood what heredoc should do?我误解了heredoc应该做什么吗?
【发布时间】:2011-08-28 20:27:48
【问题描述】:

我对 PHP 很陌生,所以我知道我在这里遗漏了一些明显的东西 - 我认为heredoc函数应该保留格式、换行符等。 但是每当我测试它时,在它解析时,都没有格式化。 我尝试了很多不同的脚本,包括来自 PHP.net 和 W3schools 等来源的复制和粘贴——所以我知道这些脚本没有任何问题。不能用谷歌搜索这个答案 - 可能是因为它太明显了? (顺便说一句,使用 MAMP 进行测试)。谢谢。

【问题讨论】:

  • 您能否附上一些示例代码并解释您对它的期望?谢谢!

标签: php heredoc


【解决方案1】:

HEREDOC 不是一个函数,它是一种指定字符串分隔符的方法,允许您在 heredoc 中放弃转义引号(我喜欢它,因为好的文本编辑器会根据 heredoc 名称语法高亮显示其内容)。

HEREDOCs do 保留所有空格、换行符等。我想您可能正在浏览器中查看结果。浏览器通常会将所有包含的空格、换行符、空格和制表符修剪为一个空格。尝试在命令行、文本电子邮件或文本文件中查看它。

【讨论】:

  • 谢谢坦度!我确实在浏览器中查看。抱歉,如果这个问题再次太明显......一旦上传到我的服务器而不是 MAMP,浏览器会以不同的方式对待它吗?我想我正在寻找在 HTML 和 PHP 之间移动的最佳方式。
  • PHP 应该以完全相同的方式处理 html,但您不能保证浏览器将如何处理您的 HTML。只需在所有主流浏览器中测试并找到最佳折衷方案(对于纯文本通常没问题)。
【解决方案2】:

它会产生一个与你设置的字符串相同的字符串。

但是,浏览器会将多个空格压缩为一个空格字符。这是设计使然。

要保留您的空间,您可以使用pre 元素(假设默认浏览器样式表)或white-space: pre CSS 属性。

<div style="white-space: pre">
<?php echo <<<A
some text
    preserved
        just
    how
 you want it.
A; ?>
</div>

jsFiddle.

【讨论】:

    【解决方案3】:

    因为您说“使用 MAMP 进行测试”,所以我假设您使用网络浏览器来显示内容。这是一个稍微错误的方法,因为网络浏览器本身会删除任何不必要的空格。查看您在浏览器中显示的页面的来源,您将看到“真实”的内容。

    【讨论】:

      【解决方案4】:

      确实如此,但仅限于它的输出。

      如果它输出 HTML,则该 HTML 将由浏览器使用处理空格的常规规则来解释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 1970-01-01
        相关资源
        最近更新 更多