1. 程式人生 > >thinkPHP讀取資料庫的utf-8中文亂碼解決

thinkPHP讀取資料庫的utf-8中文亂碼解決

本文僅測試過後臺程式為 PHP 和資料庫為 mySql資料庫、Oracle資料庫及SQL Server 2005,不100%確定也能適合其他後臺程式語言和資料庫。

    無論資料庫表內的欄位用gb2312、GBK、
utf8_general_ci或是utf8_unicode_ci,都只需要在資料庫配置資訊中加上:
'DB_CHARSET' => 'utf8',就不會出現問題,千萬要注意,這裡是'utf8' 而不是 'utf-8' 。由於在html中和php的header中都是寫utf-8。所以這裡特別容易出錯,往往會坑死很多人。

     thinPHP雖然稱:預設使用 utf-8 字符集,但是事實上並非如此。當你的頁面出現
中文亂碼的時候,除了檢查檔案本身的字符集是否為 utf-8 字符集外,通常能想到的就是在配置檔案中加上  'DEFAULT_CHARSET' => 'utf8' 。可是在執行頁面跳轉的時候亂碼總會如期而至,無論你把值寫為utf8或是gb2312還是GBK,中文亂碼都在那裡不退、不散!如此,足以讓人抓破頭皮。解決辦法是在入口檔案加上 
header('Content-Type:text/html; charset=utf-8');

    總的來說,出現中文亂碼的原因就是字元編碼不統一,但是讓很多人頭痛的是不知道哪些地方需要更改編碼以及如何統一。

    需要同意編碼的地方有,及如何統一:
    1. 程式碼檔案(判斷檢視檔案編碼的最簡單的辦法是:用記事本開啟,然後點選“另存為”,出現的視窗下方有“編碼”字樣,若不是你想要的編碼,改為你的編碼後儲存覆蓋原來的檔案即可);
    2.  html 檔案頭部應加上 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ,把 utf-8 改為你要同意的編碼即可;
    3. 資料庫連線程式碼應選擇對應字元編碼,mySql 的選擇字元編碼的程式碼為:mysql_query("SET NAMES 'utf-8';"); 其他資料庫的程式碼請自行查詢;
    4. 後臺程式程式碼 php 需要註明字元編碼,header('Content-Type:text/html; charset=utf-8');