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;
如果有遺漏與錯誤,還請指正與諒解,還是新手一枚