2012-02-15 57 views
4

我已經閱讀過這個問題並遇到過,但我還沒有找到解決方案。我有一個新聞聚合器,可以從RSS提要中獲取新聞。在顯示我是越來越黑鑽問號,所以做一些研究後的內容,我添加以下代碼行(PHP):黑鑽問號與某些字符的丟失

$content = mb_convert_encoding($content, 'UTF-8', 'HTML-ENTITIES'); 

這是成功的,在修復該問題,但看着另一篇文章說有一些帶有口音的西班牙語單詞,我注意到口音已被轉換爲時髦的字符。他們之前看起來很好。例如,現在我看到的東西,如:

吉納©ticas

現在我寧願有第二個問題,因爲它不會伸出一樣多,但最好我想解決這兩個。我的MySQL表格是UTF-8,以及頁面的文檔類型。有任何想法嗎??

+2

由於您是從不同的提要進行彙總,而這些提要都有其不同的編碼類型,因此您需要某種形式的轉換。如果我沒有記錯的話,所有的字符集都可以通過某種方式轉換爲utf8,儘管它在每個字符集之間有所不同。 Faved,我想看看這個答案! – 2012-02-15 20:50:37

回答

3

您正在從多個Feed中提取數據,因此您不能依賴所有使用相同字符編碼的提要。

XML提要應該宣佈它們在XML前導碼中是什麼字符集,並且服務器應該發送說明正在使用的文件編碼字符的標題,但它們不是必需的,如果它們不是必需的一定要準確。

你可以使用mb_detect_encoding來試圖找出你正在解析的文件使用的編碼是什麼,但是再一次說,這不是100%肯定是準確的。

因此,如果您的目標是規範化所有您正在處理的相同字符集(我猜UTF 8),您的選擇是查看XML序言,標題(如果已發送適當的)和mb_detect_encoding確定編碼的結果。如果以上所有條款都同意,您可能(但不是確定)有一個好主意文件的編碼是什麼,以及您需要做什麼來轉換它。如果任何這些方法之間存在分歧,那麼您必須自行決定採取何種行動。

總之,歡迎來到charset地獄。你覺得怎麼樣?

+0

通過使用mb_detect_encoding我能夠解決問題。我說如果編碼不是UTF-8,那麼使用mb_convert_encoding並轉換文本,否則就把它放在一邊。謝謝! – user387049 2012-02-15 22:14:52