朋友們剛學習php的時候,常常會發現瀏覽器中輸出的內容會出現一堆的亂碼問題,尤其是輸出中文的時候。為什麼會出現有亂碼的情況呢?一般來說,亂碼的出現有2種原因,一種是由於編碼(charset) 設定錯誤,導致瀏覽器以錯誤的編碼來解析,從而出現了滿屏亂七八糟的“天書”,第二種就是檔案被以錯誤的編碼開啟,然後儲存,比如一個文字檔原先是GB2312 編碼的,卻以UTF-8 編碼開啟再儲存,就會出現亂碼的問題。在下面的文章中,我們就來聊聊php中文亂碼問題和解決方案。
php中文亂碼問題
1. php如何解決中文亂碼問題?
第一種:解決HTML中中文亂碼問題方法
如果你的HTML檔案檔案出現了亂碼問題,那麼你可以在head標籤裡面加入UTF8編碼(國際化編碼):UTF-8是沒有國家的編碼,也就是獨立於任何一種語言,任何語言都可以使用的。
第二種、HTML和PHP混合的頁面解決方案
第三種、純PHP頁面的中文亂碼問題(資料是靜態)
第四種、PHP+Mysql中文亂碼問題
這個除了按照第三種所說的操作之外,還要在你的資料查詢/修改/增加之前加入資料庫編碼。而且,值得注意的是,這裡的UTF8和之前的不一樣,中間是沒有橫線的。
2. PHP使用strrev翻轉中文亂碼問題的解決方案
header("Content-Type: text/html; charset=utf-8");$str = '處理使用strrev()函數時的亂碼問題';function cnstrrev($str){ $len = strlen($str); for($i = 0; $i < $len; $i++) { $char = $str{0}; if(ord($char) > 127) //ord()函數取得第一個字元的ASCII碼,如果大於0xa0(127)的話則是中文字元 { $i+=2;//utf-8編碼的情況下,一個中文字元佔三個位元組 if($i < $len) { $arr[] = substr($str, 0, 3);//utf-8編碼的情況下,一個中文字元佔三個位元組 $str = substr($str, 3); } } else { $arr[] = $char; $str = substr($str, 1);//否則為非中文,佔一個字元 } } return join(array_reverse($arr));//以相反的元素順序返回數組:}echo $str.'+'.cnstrrev($str);
3. php中json_encode UTF-8中文亂碼的解決方案
這種簡單的做一個代碼轉換,urlcode之後再返回所需數組
public static function encodeOperations ($array) { foreach ((array)$array as $key => $value) { if (is_array($value)) { encodeOperations($array[$key]); } else { $array[$key] = urlencode(mb_convert_encoding($value,'UTF-8','GBK')); } } return $array; }
4. php url地址欄傳中文亂碼解決方案集合
url編碼
文法: string urlencode(string str);
傳回值: 字串
函數種類: 編碼處理
url解碼
還原 URL 編碼字串。
文法: string urldecode(string str);
傳回值: 字串
函數種類: 編碼處理
5. php中json_encode處理gbk與gb2312中文亂碼問題的解決方案
可見即使用UTF8編碼的字元,使用json_encode也出現了中文亂碼。解決辦法是在使用json_encode之前把字元用函數urlencode()處理一下,然後再json_encode,輸出結果的時候再用函數urldecode()轉回來。
6. PHP中Ajax中文亂碼問題解決
因為XMLHttp在處理返回的responstText的時候把responstBody按UTF-8編碼進行解碼的,如果伺服器端送出的資料流的確是UTF-8編碼,那麼中文字就會正確顯示,但如果是GBK或是其他編碼則會出現上述情況。
相關問答
1. 碰到一個中文亂碼引起的神奇的問題
2. php 中文亂碼
3. 網頁中文亂碼無法解決,見圖
【相關推薦】
1. php中文網免費視頻教程:《php.cn獨孤九賤(4)-php視頻教程》
2. php中文網相關文章:《php入門教程之一周學會PHP》