代码之家  ›  专栏  ›  技术社区  ›  isa

php->xml输出在ie上不同

  •  1
  • isa  · 技术社区  · 15 年前

    我一直试图用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> 手动,即正确显示值。

    顺便说一下,我在flash(as3)中使用了这个XML输出,这也显示了与ie相同的结果。

    我做错什么了?

    3 回复  |  直到 14 年前
        1
  •  1
  •   leepowers    15 年前

    这似乎是由于会话差异造成的-IE会话没有存储用户ID。类似地, $match->getId() 实际上是 0 -我想在其他电脑上使用Chrome或Safari或Web浏览器也会得到类似的结果。

    另一件事:flash可能不会根据请求将php会话cookie发送到服务器-这将与ie行为匹配/没有有效的会话。

        2
  •  1
  •   Soliman    15 年前

    尝试:

      header( "content-type: application/xml; charset=ISO-8859-15" );   
    

    $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 
    
        3
  •  0
  •   Mchl    15 年前

    使用什么浏览器对PHP的执行方式没有影响(因为它是在服务器上执行的,而不是在浏览器中)。请注意,在第二个示例中,您的风扇ID也是空的,这表示会话设置有问题。调查这个。

    说了这么多:您考虑过使用simpleXML()从PHP输出XML吗?使用它比重复标签有趣得多。