5

我正在尝试在 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。还有一个关于这个的在线问题,未解决。

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

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

  • 这是一个已知的错误/功能吗?
  • 是配置问题吗?
  • Apache 还是 PHP 应该归咎于哪个?
  • 我必须升级我的服务器吗?我宁愿不。
4

4 回答 4

3

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

于 2013-03-22T19:33:13.763 回答
3

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

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

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

于 2013-04-02T11:01:01.450 回答
3

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

这就是我们造成它的原因:

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

<EOF>

注意文件末尾的换行符

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

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

只是。惊人的。

于 2016-04-06T00:58:40.117 回答
2

就我而言,它是开头的换行符

在此处输入图像描述

于 2019-02-11T14:15:38.297 回答