2011-10-12 48 views
0

我有一個討厭的字符編碼問題,並尋找如何解決它的想法。存儲在我的數據庫中的不同字符編碼

我一直在latin1_swedish_ci格式維護過去幾年的數據庫。一切正常。當在PHPMyAdmin中檢查varchars時,我可以看到類似ë的口音,並在前端顯示正確。

現在最近我把我的應用程序切換到UTF-8。我也將我的HTML頁面的字符編碼設置爲UTF-8,但不是我的數據庫。問題開始浮出水面。有時編碼正確的字符,有時不是。

現實情況是,最近存儲的varchars顯示爲很好,舊的varchars(在切換到UTF-8之前)顯示爲黑色方塊。如果我將頁面的字符編碼切換到ISO8859-1,會發生相反的情況。舊特殊字符顯示正常,新特殊字符顯示爲黑色正方形。

所以現實是我的數據庫存儲的特殊字符與以前不同。我怎樣才能在不破壞事情的情況下清理這個混亂?

+0

你是否真的是數據庫?除非您嘗試將Unicode字符存儲在非Unicode兼容數據類型中,否則我不認爲整理(這是什麼'latin1_swedish_ci')是一個問題? – Widor

+0

你必須通過UTF-8整個管道,這意味着你的數據庫轉換爲UTF-8。否則,你正在通過一個圓孔推一個方形釘。那或者爲每個查詢進行字符集轉換,這會變得很痛苦。在數據庫中進行一次性批量轉換爲utf-8,問題應該解決。 –

+0

嘿馬克,但如果我將我的數據庫轉換爲UTF-8,不會顯示正確顯示的特殊字符?或者他們會被單獨留下,因爲他們已經是UTF-8了? – bart

回答

1

你可以嘗試這樣的:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 

$string = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $string); 

,看看編碼的字符切換。

相關問題