我一直在尝试使用PHP输出XML,但在Internet Explorer中遇到了奇怪的(!)错误。
预期的xml输出为:(简化)
<root>
<match_id>12</match_id>
<stadium_id>43</stadium_id>
<tribune_id>2</tribune_id>
<fan_id>453</fan_id>
</root>
我使用以下PHP代码生成此输出:
echo "<?xml version='1.0' encoding='utf-8' ?>
<root>
<match_id>"; echo $match->getId(); echo "</match_id>
<stadium_id>43</stadium_id>
<tribune_id>2</tribune_id>
<fan_id>".$_SESSION['user_id']."</fan_id>
</root>";
在Firefox中,输出与预期相同。但是,在IE中,输出是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<match_id>0</match_id>
<stadium_id>43</stadium_id>
<tribune_id>2</tribune_id>
<fan_id />
</root>
这是一个非常烦人的错误。我已经为XML输出设置了PHP标头,并且改变了很多其他的东西但是无法使它工作。
$match->getId()
部分只返回一个整数,但IE总是将此值显示为0.如果我手动设置<fan_id>
和<match_id>
,IE会正确显示这些值。
顺便说一下,我在Flash(AS3)中使用这个XML输出,这也显示了与IE相同的结果。
我做错了什么?
答案 0 :(得分:1)
这看起来像是由于会话差异 - IE会话没有存储用户ID。同样,$match->getId()
实际上是0
- 我想你会在任何其他计算机上使用Chrome或Safari或网络浏览器获得类似的结果。
另一件事:Flash可能没有在请求中将PHP会话cookie发送到服务器 - 这将匹配IE行为/无效会话。
答案 1 :(得分:1)
尝试:
header( "content-type: application/xml; charset=ISO-8859-15" );
OR
$doc = new DOMDocument;
$root = $doc->createElement('root');
$doc->appendChild($root);
$match_id = $doc->createElement('match_id', $match->getId());
$root->appendChild($match_id);
$stadium_id = $doc->createElement('stadium_id', '43');
$root->appendChild($stadium_id);
$tribune_id = $doc->createElement('tribune_id', '2');
$root->appendChild($tribune_id, '2');
$fan_id = $doc->createElement('fan_id', $_SESSION['user_id']);
$root->appendChild($fan_id);
echo $doc->saveXML();
//$doc->save('file.xml'); // if you want to write to file
答案 2 :(得分:0)
使用什么浏览器对PHP的执行方式没有影响(因为它在服务器上执行,而不是在浏览器中执行)。请注意,在第二个示例中,您的fan_id也是空的,这表示您的会话设置有问题。调查一下。
说了这么多:你考虑过使用simplexml()从PHP输出XML吗?使用它比回显标签更有趣。