【发布时间】: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?
- 我必须升级我的服务器吗?我宁愿不要。
【问题讨论】:
-
如果不输出标题会得到什么?比如如果你的整个文件是
<?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存在吗? -
还有这个:
<?php ob_start(); echo "bug"; ob_end_flush(); exit; ?>- 复制相同,没有新行。
标签: php apache2 character prepend