PHP常見亂碼問題的解決辦法

     文件的編碼問題會給初學者帶來好多麻煩,最常見的就是因爲編碼不統一產生頁面的亂碼,這個還好辦,把編碼搞統一了就成了,有一種比較隱蔽的。 有一次我遇到這樣一個問題,一提交頁面 session 就沒了,我整了一個晚上還沒搞定,後來懷疑這個是apache的問題或者是機器的問題,第二天無意間改一下文件的編碼這個問題搞定了。 原來我用的是 UTF-8(With BOM) 編碼,前邊有三個字節的文件頭,有了這個,session_start(); 便不再第一行了,所以出了這樣的事情。
 
整理一下,PHP常見的亂碼情況主要有以下幾種:
 
1. 數據庫查出來的東西亂碼
       這個主要是數據庫的編碼和你頁面的編碼不一樣,解決辦法: 看一下你文件的編碼和數據庫的編碼,mysql 不是有那樣的語句嗎? set charset 'gb2312'; 好多人不是喜歡用國標的,gb2312的編碼嗎? 執行SQL語句之前執行以下這個就好了,如果你是其他的編碼, 換一下參數就行了,就是把數據庫輸出的東西強制轉換一下字符格式 
 
2. 頁面全部亂碼
     這個主要是你的文本文件的中文字符的編碼,跟輸出用到的編碼方式不一樣 ,html的文件頭,我們一般都會寫上: <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  這個是gb2312編碼的,然後你看下你文件的編碼,我比較喜歡用NotePad++ 編輯器,因爲這個編輯器可以很容易地查看當前文件的編碼方式,很方便地轉換文件的編碼方式:
 
把編碼改統一就行了
 
一個項目一般來說只用一種編碼方式,爲了保持編碼格式的一致性,一般會在全局的文件中寫一條語句吧頁面強制輸出爲某一個編碼的:
    header ( "Content-type: text/html; charset=utf-8" ); // 我這裏強制輸出爲UTF-8的
 
 
3. ajax 中文亂碼
    ajax 亂碼也是經常用到的,ajax傳輸的時候是把數據 escape過的,英文是沒問題,中文的話可能會亂碼,這個問題以前也困擾了好久後來一個高手給了我一些函數(開源的還是他寫的不知道,忘問了),讓我調用一下,其實這個也很簡單 也就是先把字符 先 unescape 一下,然後強制轉換一下編碼(Ajax傳輸的標準格式是utf-8),代碼我就不貼出來了(不好意思哦,這個不是我的),大家感興趣的話可以寫一下這個函數,雖說實現功能簡單,但是很有用的
4. 其他的情況想不起來了,希望大家能 集思廣益,大家一起討論一下這個亂碼問題
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章