2012-08-10 131 views
0

我對使用simplexml_load_string的非標準字符有困難。simplexml_load_string奇怪的字符

我已經使用file_get_contents加載了一份報紙xml提要。如果我打印到屏幕上的內容,我收到了標題的文章作爲一個:

<title>&#8216;If Legault were running in Alberta, he&#8217;d be more popular&#8217;: How right-wing is the CAQ?</title> 

如果我再這樣做:

$feed = @simplexml_load_string($xml); 

和打印$飼料的結果,標題已經改變到:

[title] => �If Legault were running in Alberta, he�d be more popular�: How right-wing is the CAQ? 

有關如何阻止這些字符被顯示的任何建議是這樣的?

回答

0

看起來SimpleXML正在創建一個UTF-8字符串,然後以ISO-8859-1(拉丁-1)或類似於CP-1252的東西呈現。

當您將結果保存到文件並通過Web服務器提供該文件時,瀏覽器將使用文件中聲明的編碼。

包含在網頁中 由於您的網頁編碼不是UTF-8,因此您需要將字符串轉換爲您正在使用的任何編碼,例如ISO-8859-1(latin-1)。

這是很容易使用的iconv()完成:

$xmlout = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $xmlout); 

保存到數據庫 您的數據庫列不使用UTF-8排序,所以你應該使用的iconv字符串轉換成字符集,你的數據庫使用。

假設您的數據庫排序規則與您所呈現的編碼規則相同,那麼在從數據庫讀取數據時就不必做任何事情。

說明 在UTF-8中,使用0xc2前綴字節來訪問「Latin-1 Supplement」塊的上半部分,其中包括重音字母,貨幣符號,分數,上標2和3等字符版權和註冊商標符號,以及不間斷的空間。

但是在ISO-8859-1中,字節0xC2表示一個Â。所以當你的UTF-8字符串被誤解爲其中的一個時,你會得到Â後跟其他一些無意義的字符。

0

這是一個字符集問題。它需要是utf8,你可以在內容上運行utf8_decode,但是通過匹配輸入(feed)到輸出(我假設的html頁面)的字符集來解決這個問題更好。