2010-05-17 89 views
1

我有一個由PHP腳本編寫的XML文件。 XML文件的數據是從幾個不同的RSS源收集的。 PHP腳本由Cron作業每5分鐘調用一次。 PHP腳本可能需要5-10秒來編寫XML文件。瀏覽器沒有讀取整個XML文件

問題出在XML文件寫完之後,我可以通過DreamWeaver打開它並閱讀一切正常 - 但是當我將XML文件的URL輸入到我的Web瀏覽器(IE或Firefox)時,我得到一個「XML解析錯誤:格式錯誤「瀏覽器中出現錯誤。當我在瀏覽器中查看>源代碼時,XML文件看起來不完整 - 但是當我直接從服務器上打開文件時,它是完整的。

任何人都知道這裏發生了什麼?

+0

此外,如果我通過DreamWeaver打開文件並執行「S​​ave As ...」,然後將新文件上傳到服務器,我可以通過Web瀏覽器正確查看新文件。 – Chris 2010-05-17 16:24:27

+1

將「查看>源代碼」複製並粘貼到XML文檔中斷處。 – mmattax 2010-05-17 16:27:34

+0

現在仔細觀察,瀏覽器告訴我「在文本內容中發現了無效字符,處理資源時出錯......」因此,當我從原始RSS源中讀取它時,可能會出現編碼。 XML真的很長,我不認爲它會在這裏粘貼它,但沒有任何可疑的奇怪字符。 – Chris 2010-05-17 16:39:13

回答

0

答案最終將處理來自始發RSS源的編碼。原始提要使用ISO-8859-1進行編碼,在將數據寫入我的XML文件之前,需要將其轉換爲UTF-8。

//Get Data from source URL 
$xml = file_get_contents("http://www.sourceurl.com/someting.rss"); 
//Convert from ISO to UTF 
$xml = mb_convert_encoding($xml, 'UTF-8', mb_detect_encoding($xml, 'UTF-8, ISO-8859-1', true)); 

一旦這樣做,我可以通過$ XML遍歷,但是我需要和將數據寫入到我的個性化的XML文件。顯然在ISO-8895-1編碼中有一些字符在寫入我的XML文件之前沒有被正確解釋。

0

那麼,它可能的XML是在不同的編碼到一個Web服務器指定的標頭。這可能會搞砸了。

我建議你用Wireshark看數據是否爲實際上被正確傳遞。還要看看XML文檔本身及其內容編碼,而不是Web服務器指定的編碼。

如果您從瀏覽器執行「另存爲...」並嘗試打開結果,會發生什麼情況?這可能會忽略頭文件中指定的內容編碼,並將文件轉儲到磁盤 - 如果我是對的,應該在XML編輯器中正確打開。

0

它可以幫助有複製/粘貼的XML文件。

我懷疑Dreamweaver將xml文件接受爲不是真正的xml文件(實體問題或xml保留字符),或者您有編碼問題。你有ASCII 127字符集之外的字符嗎?

傑羅姆·瓦格納

0

它是一個長鏡頭,但你可以檢查,如果你設置了一個無效「的Content-Length」頭。 這會導致瀏覽器部分下載文件。