到此應該就可以解決絕大多數我們遇到的亂碼問題了,另外還必須強調的是,有時候亂碼的出現有可能是以上幾種原因混合造成的。
對于這樣的問題處理起來就比較的麻煩。因為首先要保證你在數據庫中保存的數據的字符集與數據庫的字符集是一致的。如果你在一個utf8的數據庫中保存了GBK字符數據(如果你頁面的編碼與數據庫的編碼不一致,那么產生這個問題的可能性就很大),那么假設以上的設置都正確,結果還是會出現亂碼的問題。不過這類問題一旦確定了產生的原因,那么就還是有辦法解決的,比如剛才我舉的這個例子。
我們如果能確保其他環節的設置都是正確的,并且能夠確認是由于把gbk的數據存到了utf8的數據庫中而造成的亂碼,那么我就可以把這些數據從數據庫中取出來之后再用iconv()轉換編碼也是可以的。
總而言之,我們應當盡量的保證數據庫中的數據是正確的,那么問題處理起來就相對簡單了。
說了一大堆可能把你給弄迷糊了,我將其總結為以下四點,便于大家記憶。
1、要保證數據庫中存的數據與數據庫編碼一致,即數據編碼與character_set_database一致;
2、要保證通訊的字符集與數據庫的字符集一致,即character_set_client, character_set_connection與character_set_database一致;
3、要保證SELECT的返回與程序的編碼一致,即character_set_results與程序編碼一致;
4、要保證程序編碼與瀏覽器編碼一致,即程序編碼與<meta http-equiv="Content-Type" content="text/html; charset=?"/>一致。
文章來源于領測軟件測試網 http://www.kjueaiud.com/