2010-07-28 40 views
1

不同我一直在試圖用PHP輸出XML卻遇到了Internet Explorer中的奇怪的錯誤(!)。PHP - > XML輸出是IE

期望的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

我不認爲這是一個XML的問題。這聽起來像別的東西是錯誤的,可能在你的會話處理。如果將這些值硬編碼到輸出中會發生什麼?我敢打賭他們工作。在什麼時候設置了'user_id'? – 2010-07-28 20:40:34

回答

1

這看起來就像是由於會話區別 - IE會話沒有存儲用戶ID。同樣,$match->getId()實際上是0 - 我想你會使用Chrome或Safari或任何其他計算機上的網絡瀏覽器獲得類似的結果。其他

一兩件事:閃光燈可能不會被髮送PHP會話cookie到請求的服務器 - 這將匹配IE的行爲/沒有有效的會話。

+0

是的,這個問題是通過考慮會話問題解決的。我從一開始就在使用firefox,在某個地方,會話是在Firefox中設置的。但是,在IE中,會話值沒有設置,因此取決於會話值的變量顯示爲中斷。 長時間工作後,有時候其他人的眼睛會很容易看到問題。 謝謝pygorex1。 – isa 2010-07-29 05:32:02

0

使用何種瀏覽器對如何在PHP執行沒有影響(因爲它在服務器上執行,而不是瀏覽器)。請注意,在第二個示例中,您的fan_id也是空的,這表明會話設置有問題。調查一下。

話雖如此:使用SimpleXML()來輸出XML你考慮從PHP?使用標籤比使用標籤更有趣。

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