我在本地计算机上使用WAMPServer 2.1。我正在尝试创建一个简单的PHP脚本来输出XML文件。如果不在IE和Chrome上生成错误,我无法让它工作。在Firefox 4上,它可以工作。
这是PHP:
<?php
main();
function main()
{
header("Content-type: application/xml");
OutputXML('xml/login_user_good.xml');
exit(0);
}
function OutputXML($filename)
{
echo file_get_contents($filename);
}
?>
这是XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<login_user>
<result_code value="1"/>
<error value="Invalid username or password"/>
</login_user>
当我尝试使用IE 8访问我的PHP脚本时,出现此错误:
The XML page cannot be displayed Cannot view XML input using style sheet.
Please correct the error and then click the Refresh button, or try again later.
--------------------------------------------------------------------------------
Invalid at the top level of the document. Error processing resource
'http://localhost/kiamobile/login_user.php'. Line 1, P...
<?xml version="1.0" encoding="utf-8" ?>
^
在Google Chrome 10上,我收到此错误:
This page contains the following errors:
error on line 1 at column 6: XML declaration allowed only at the start of the document
在Firefox 4上,我得到格式正确的XML输出。
在任何浏览器上,当我查看源代码时,我都能看到正确的XML。
我尝试过使用和不使用显式标头。如果我删除对PHP header()函数的调用,我会得到以下结果:
同样,如果我在任何浏览器中查看源代码,我都可以看到XML。我尝试使用text / html而不是application / xml,但没有效果。
我已经尝试直接在PHP代码中生成XML,如下所示:
<?php
main();
function main()
{
header("Content-type: application/xml");
OutputXML();
exit(0);
}
function OutputXML()
{
echo <<<END
<?xml version="1.0" encoding="utf-8" ?>
<login_user>
<result_code value="1"/>
<error value="Invalid username or password"/>
</login_user>
END;
}
?>
当我这样做时,我得到了这些结果:
我做错了什么?
答案 0 :(得分:1)
在PHP开始标记
之前,您的脚本可能包含不需要的和不可见的字符(如BOM)答案 1 :(得分:0)
浏览器不是为了显示任何XML而设计的。他们喜欢HTML(可以是XHTML)。目前还不清楚为什么要让浏览器显示这些内容。如果它是针对一个用户,那么你应该用HTML格式化它们,如果它是用于API(服务),那么用curl / wget / etc检查它,我确信每次XMl看起来都一样。