PHP - > IE上的XML输出不同

时间:2010-07-28 20:35:16

标签: php xml flash internet-explorer

我一直在尝试使用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相同的结果。

我做错了什么?

3 个答案:

答案 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吗?使用它比回显标签更有趣。