【问题标题】:Apache or PHP generating prepending line feed characterApache 或 PHP 生成前置换行符
【发布时间】:2013-03-12 18:39:50
【问题描述】:

我正在尝试在 PHP Web 应用程序中生成 XML 文件:

<?php
... 
header('Content-Type: application/xml');
header('Content-Disposition: attachment; filename=test.xml');
echo "<?xml version=\"1.0\"?>\r\n" . 
...

奇怪的是,当使用我的服务器时(分别是 PHP 5.3.8/Apache 2.2.17 和 PHP 5.3.10-1/Apache 2.2.22)插入了换行符(十六进制 0a)字符在输出的开头,导致无法使用的无效XML。有one more online question about this,未解决。

所以如果我尝试echo "bug";,我会得到 4 个字节,而不是 3 个:0a 62 75 67

但是,当在本地使用 WAMP 服务器(PHP 5.4.3/Apache 2.4.2)时,我得到 3 个字节:62 75 67

  • 这是一个已知的错误/功能吗?
  • 是配置问题吗?
  • 这是罪魁祸首,Apache 或 php?
  • 我必须升级我的服务器吗?我宁愿不要。

【问题讨论】:

  • 如果不输出标题会得到什么?比如如果你的整个文件是&lt;?php echo 'foo';exit;?那你还得到多余的字符吗?
  • @Jason Swett:是的,刚刚测试过了。
  • 测试服务test.html?看看Apache是​​不是罪魁祸首?用命令行 PHP 测试,看看是否纯 PHP ......?当然会想到 BOM,但 0a 无效,对于 UTF-8 BOM 应该是三个字节吧?
  • 此代码:ob_start(); echo "bug"; ob_end_flush(); exit; 0a 存在吗?
  • 还有这个:&lt;?php ob_start(); echo "bug"; ob_end_flush(); exit; ?&gt; - 复制相同,没有新行。

标签: php apache2 character prepend


【解决方案1】:

可能是编码问题。如果您使用UTF8 with BOM,则文件开头有一个额外的字符。 检查文件的编码,并将其转换为不带 BOM 的 UTF8 以避免出现此额外字符。

【讨论】:

  • 我怀疑可能涉及 BOM,但据我所知,它与 0a 字符无关。 Notepad++ 报告该文件是没有 BOM 的 UTF8 类型。也尝试了 UTF-8。两者的结果相同。
【解决方案2】:

似乎0a 问题是由我的主 PHP 文件包含的 PHP 文件中的尾随 Enter 字符引起的。当我从包含文件中删除它时,我输出中的 0a 字符消失了。

我觉得这很奇怪的是我经历过的 PHP 版本之间对空格的不同处理,以及在测试社区的建议时我仍然得到 0a 的事实。

我没有更多时间对此进行研究,但我对遇到类似问题的人的建议是检查包含文件中的空格是否会影响等式。此外,请避免按照下面 Dan 的建议结束 &lt;?php 标记。

【讨论】:

  • 如果您的 PHP 文件不是模板文件,最好不要在其末尾关闭 &lt;?php 标签。而这主要是因为这个原因。您永远不必担心尾随空格或换行符,调试简直就是地狱。
【解决方案3】:

我刚碰到这个。我和团队花了一个小时追查。太奇妙了。我非常喜欢 PHP。

这就是我们的原因:

<php
  $code = "blah";
?php>

<EOF>

注意文件末尾的换行符

PHP 以其超然的美感,将把这个换行解释为你实际上试图发送给某人的东西。毕竟它 HTML。因此,即使包含路径中的多个 PHP 文件以换行符结尾,您的响应中也最多会添加一个换行符。

请特别注意您包含或需要的任何文件,如果它们以换行符结尾,那么您从当前文件中回显或打印的任何内容都将以换行符开头。

只是。太棒了。

【讨论】:

    【解决方案4】:

    在我的情况下,它是开头的换行符

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多