① 如何解決php中文亂碼問題
PHP中文亂碼主要是編碼不對,存在以下兩種情況,你以此檢查一下 ,改對編碼就行了
1、 php文件本身的編碼與網頁的編碼應匹配
a. 如果欲使用gb2312編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=gb2312"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的編碼格式為ANSI,可用記事本打開,另存為選擇編碼為ANSI,覆蓋源文件。
b. 如果欲使用utf-8編碼,那麼php要輸出頭 :header(「Content-Type: text/html; charset=utf-8"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的編碼格式為utf-8。保存為utf-8可能會有點麻煩,一般utf-8文件開頭會有BOM,如果使用 session就會出問題,可用editplus來保存,在editplus中,工具->參數選擇->文件->UTF-8簽名,選擇總 是刪除,再保存就可以去掉BOM信息了。
2. php本身不是Unicode的,所有substr之類的函數得改成mb_substr(需要裝mbstring擴展);或者用iconv轉碼。
② php正則匹配中文亂碼問題
當然亂碼啦,一個漢字在php里是三個字元,你這樣直接用.去匹配任意字元的話,三個.才等於一個漢字。你把一個漢字給截取掉了,當然亂碼了,不信你把你的0,10改成0,11。就不亂碼的,而且只匹配出兩個漢字。漢字不是這樣去匹配的,有專門匹配漢字的正則,
③ 中文url編碼、base64編碼,PHP解碼中文部分亂碼
如果兩端伺服器頁面使用的編碼不一致,就會導致亂碼
如你所說,對方伺服器發來的是GBK編碼的內容,如果你本地PHP用的編碼不是GBK就會是亂碼
2種解決方案:
將頁面編碼更改為GBK(可以通過header('Content-Type:text/html charset=gbk');)
將GBK編碼轉為當期頁面編碼(假設當前頁面是utf-8),可以使用iconv('gbk','utf-8',$content);其中$content是你經過urldecode、base64解碼後的字元串
④ php顯示中文亂碼
php資料庫中文亂碼的解決辦法:1、創建資料庫時,規定字元類型為uft8;2、創建表時,規定字元類型為utf8;3、在PHP的MySQL連接函數中,添加語句「mysql_query("set names 'utf8'")。