2011-11-18 56 views
1

我剛剛推出了一個我一直在研究的小應用程序。沒什麼重要的,但我想得到正確的工作。它在www.wedrapp.com來自Google Weather API的XML響應中的奇怪字符錯誤

大多數情況下,它工作得很好。輸入一個城市,返回XML並解析,返回的數據會顯示給用戶。

不幸的是,當搜索到某些城市如馬賽時,返回錯誤。如果你搜索馬賽,你會明白我的意思。我有一種感覺,就是對特殊字符的處理,因爲馬賽搜索實際上是以XML格式返回馬賽,普羅旺斯 - 阿爾卑斯 - 藍色海岸。同樣,巴黎給出了一個錯誤,因爲它實際上是返回巴黎,法蘭西島。

任何人都可以闡明如何去除這些奇怪的字符,或者至少阻止他們提供錯誤,然後再擊中屏幕?它是用PHP解析的XML。

+0

看來我需要找到一種方法來解析XML編碼,而不是UTF-8,如下所述:http://stackoverflow.com/questions/5964214/problem-parsing-google-weather-data-only - 用於巴黎。 誰能告訴我如何用正確的編碼解析它? – cian1991ferrari

+0

可愛的用戶界面,你有,順便說一句。 –

+0

非常感謝Levi! :) – cian1991ferrari

回答

3

找出google返回的XML是哪種編碼。然後將其從該編碼重新編碼爲UTF-8,然後您可以使用SimpleXML加載XML。

Google Weather API XML基於請求時指定的語言進行編碼(可以指定您希望擁有的編碼,我很快就會談到)。

例如,它可以是ISO-8859-2作爲PHP XML — Google Weather API - parsing and modifying data (Language, UTF-8, and F to Celsius)顯示的相關問題。

可以找出哪些通過查看HTTP響應頭的Content-Type之一:

Content-Type: text/xml; charset=ISO-8859-1 

您使用utf8_encodeDocs改變編碼,將其轉換一個ISO-8859-1(也被稱爲Latin-1)編碼的字符串,以UTF-8。它看起來像谷歌天氣API的標準查詢默認返回這個。

您可以通過將oe參數添加到查詢來指定您想要的編碼。例如,直接得到它爲UTF-8

http://www.google.com/ig/api?weather=Mountain+View&oe=utf-8 
               ^

這樣做將確保您始終獲得特定編碼,而不是你需要猜測或解析響應頭。

+0

感謝Hakre,只是使用utf8_encode()函數重新編碼爲UTF-8。現在顯示完美! :D – cian1991ferrari

+0

@ cian1991ferrari:我擴展了答案,解釋了爲什麼以及如何獲得編碼爲UTF-8的響應。 – hakre

+0

這個oe param ='utf-8'正在像一個魅力。非常感謝! –