php亂碼的解決方法小結

   php的亂碼問題是困擾新手的一個常見問題。

   解決問題之前自然要明白產生問題的原因:每個國家(或區域)都規定了計算機信息交換用的字符編碼集,如美國的擴展 ASCII 碼, 中國的 GB2312-80,日本的 JIS 等。

   知道原因後解決辦法也就很明瞭了:統一字符編碼集。

   1.php文件本身的編碼

   使用EditPlus保存文件的時候記得選擇編碼,文件另存爲,在編碼中選擇一致的編碼

   2.網頁的編碼

     2.1對於html靜態頁面可以在head中添加以下代碼

           聲明客戶端的瀏覽器用什麼字符集編碼顯示該頁面

<meta http-equiv="Content-Type" content="text/html; charset=xxx">
     2.2對於php文件可以添加以下代碼
 header("content-type:text/html; charset=xxx"); 
這個函數header()的作用是把括號裏面的信息發到http標頭。

看起來效果和上面的差不多,但是因爲兩者採用的手段不同,前者使用的是meta標籤,屬於html信息。後者是http標頭,會比html信息更先到達瀏覽器。

    2.3 AddDefaultCharset

    Apache 根目錄的 conf 文件夾裏,有整個Apache的配置文檔httpd.conf。

   其中有一行AddDefaultCharset xxx,置整個服務器內的網頁文件https標頭裏的字符集爲你默認的xxx字符集,相當於給每個文件都 加了一行header("content-type:text/html; charset=xxx")。

  2.4 php.ini 中default_charset

  default_charset = xxx  定義了 php 的默認語言字符集。一般推薦註釋掉此行,讓瀏覽器根據網頁頭中的 charset 來自動選擇語言,這樣就可以在同臺服務器上提供多種語言的網頁服務。

   3.數據庫的編碼

   對於動態網站來說很多時候頁面上要顯示的數據來自於數據庫,因此數據庫數據編碼的統一同樣很重要

   這包括了1.數據庫編碼;2.表單編碼;3.字段編碼

   3.1通過命令修改編碼 

     3.1.1首先查看數據庫字符編碼,命令爲:

       show variables like’collation_%’;

       show variables like’character_set_%’;

     3.1.2在命令行修改字符編碼(例如gb3212)

       set character_set_client=gb2312;客戶端編碼方式

       set character_set_connection= gb2312;建立連接使用的編碼

       set character_set_database= gb2312;數據庫的編碼   

       set character_set_results= gb2312;結果集的編碼

       set character_set_server= gb2312;數據庫服務器的編碼

       保證前五個採用的編碼方式一樣,就不會出現亂碼問題。

       set character_set_system= gb2312;

       set collation_connection= gb2312;

       set collation_database= gb2312;

       set collation_server= gb2312;

     3.2通過修改mysql配置文件來更改編碼

       打開mysql的安裝目錄,找到my.ini這個文件,打開文件

       找到default-character-set=gb2312這個字段,它就是設置編碼的,後面的是編碼格式,更改成你所想要的,然後重啓mysql服務即可

  4.php連接數據庫時的設置

   連接數據庫時mysql_select_db()後面,要加一句 mysql_query( set names utf8 );

   這句話的效果相當於上面的

   set character_set_client =gbk;
   set character_set_connection = gbk;
   set character_set_results = gbk;

   以上幾點都設置統一之後應該是不存在亂碼問題了

   如果有遺漏與錯誤,還請指正與諒解,還是新手一枚


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章