【问题标题】:PHP -> XML output is different on IEIE 上的 PHP -> XML 输出不同
【发布时间】:2010-07-28 20:35: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-&gt;getId() 部分只是返回一个整数,但 IE 始终将此值显示为 0。如果我手动设置 &lt;fan_id&gt;&lt;match_id&gt;,IE 会正确显示这些值。

顺便说一句,我在 Flash (AS3) 中使用了这个 XML 输出,这也显示了与 IE 相同的结果。

我做错了什么?

【问题讨论】:

  • 我认为这不是 XML 问题。这听起来像是其他问题,可能在您的会话处理中。如果将值硬编码到输出中会发生什么?我敢打赌他们工作。 user_id 设置在哪一点?

标签: php xml flash internet-explorer


【解决方案1】:

这似乎是由于会话差异 - IE 会话未存储用户 ID。同样,$match-&gt;getId() 实际上是0 - 我想你会在任何其他计算机上使用 Chrome 或 Safari 或网络浏览器得到类似的结果。

另一件事:Flash 可能不会在请求时将 PHP 会话 cookie 发送到服务器 - 这将匹配 IE 行为/没有有效会话。

【讨论】:

  • 是的,这个问题是通过考虑会话问题来解决的。我从一开始就一直在使用 Firefox,在某个地方,会话是在 Firefox 中设置的。但是,在 IE 中,未设置会话值,因此依赖于会话值的变量显示为已损坏。长时间工作,有时其他眼睛可以很容易地看到问题。谢谢 pygorex1。
【解决方案2】:

试试:

  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】:

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

    说了这么多:您是否考虑过使用 simplexml() 从 PHP 输出 XML?使用起来比回显标签有趣得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 2010-11-04
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      相关资源
      最近更新 更多