朋友們剛學習php的時候,常常會發現瀏覽器中輸出的內容會出現一堆的亂碼問題,尤其是輸出中文的時候。為什麼會出現有亂碼的狀況呢?一般來說,亂碼的出現有2種原因,一種是由於編碼(charset) 設定錯誤,導致瀏覽器以錯誤的編碼來解析,從而出現了滿屏亂七八糟的“天書”,第二種就是文件被以錯誤的編碼打開,然後儲存,例如一個文字檔案原先是GB2312 編碼的,卻以UTF-8 編碼打開再儲存,就會出現亂碼的問題。在下面的文章中,我們就來聊聊php中文亂碼問題和解決方案。
php中文亂碼問題
#1. php如何解決中文亂碼問題?
第一種:解決HTML中中文亂碼問題方法
如果你的HTML檔案檔案出現了亂碼問題,那麼你可以在head標籤裡面加入UTF8編碼(國際化編碼):UTF-8是沒有國家的編碼,也就是獨立於任何一種語言,任何語言都可以使用的。
第二種、HTML和PHP混合的頁面解決方案
第三種、純PHP頁面的中文亂碼問題(資料是靜態的)
第四種、PHP+Mysql中文亂碼問題
這個除了按照第三種所說的操作之外,還要在你的資料查詢/修改/增加之前加入資料庫編碼。而且,值得注意的是,這裡的UTF8和之前的不一樣,中間是沒有橫線的。
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; }
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()轉回來。
因為XMLHttp在處理返回的responstText的時候把responstBody按UTF-8編碼進行解碼的,如果伺服器端送出的資料流的確是UTF-8編碼,那麼中文字就會正確顯示,但如果是GBK或是其他編碼則會出現上述情況。
相關問答
2. php 中文亂碼
##【相關推薦】1. php中文網免費影片教學:2. php中文網相關文章:以上是php中文亂碼問題解決方案總合的詳細內容。更多資訊請關注PHP中文網其他相關文章!