Apache或PHP生成前置换行符

时间:2013-03-22 19:20:52

标签: php apache2 character prepend

我正在尝试在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?
  • 我是否必须升级服务器?我不愿意。

4 个答案:

答案 0 :(得分:3)

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

我发现这个特有的是我经历过的PHP版本之间的空白处理,以及在测试社区建议时我仍然得到0a的事实。

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

答案 1 :(得分:3)

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

这就是我们的原因:

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

<EOF>

注意文件末尾的新行

PHP,在它的所有超凡之美中,都会将这个新行解释为你实际上想要发送给某人的东西。毕竟 HTML。因此,即使您的包含路径中的多个PHP文件以换行符结尾,也会在响应之前添加最多一个换行符。

请特别注意您包含或要求的任何文件,如果它们以换行符结尾,则您在当前文件中回显或打印的任何内容都将添加换行符。

JUST。真棒。

答案 2 :(得分:2)

也许这是一个编码问题。如果您使用UTF8 with BOM,则文件开头会有一个额外的字符。 检查文件的编码,并将其转换为没有BOM的UTF8,以避免这个额外的字符。

答案 3 :(得分:0)

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

enter image description here