標籤:php 字元集 編碼 亂碼
在編寫php的時候,總會遇到編碼的問題,對於php頁面的編碼(不考慮參數的編碼)解析順序是怎麼樣的?
首選確定影響頁面編碼的因素有一下幾點:
1、檔案的編碼方式
2、Apache2的預設字元集設定
3、PHP.ini中的預設字元集的設定
4、PHP指令碼中手動輸出header(‘Content-type:text/html;charset=xxx’);
5、html頁面中加入
參考互連網上資料,給出的答案如下:
php.ini預設字元集設定 > header函數字元集設定 > apache2預設字元集設定 > meta標籤字元集設定
對於變數需要轉換編碼,PHP提供了iconv和mb_convert_encoding,其實兩個都是字串轉碼。
說明:string iconv ( string in_charset, string out_charset, string str ),將字串 str 從 in_charset 轉換編碼到 out_charset。
說明:string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] ),將 string 類型 str 的字元編碼從可選的 from_encoding 轉換到 to_encoding。
兩個的主要區別,參考了一下其他網站,主要解釋如下:
1、mb_convert_encoding() 該函數會根據內容自動識別編碼,但是執行效率比iconv差;
2、然後有一種說法就是iconv()在一些字元轉換下會不正常,網上有種說法就是:發現iconv在轉換字元”—”到gb2312時會出錯,如果沒有ignore參數,所有該字元後面的字串都無法被儲存。不管怎麼樣,這個”—”都無法轉換成功,無法輸出。 另外mb_convert_encoding沒有這個bug;
3、mb_convert_encoding()是PHP擴充函數,要開啟擴充庫才能用;而iconv是PHP內建函數,不需另外開啟擴充庫就可以使用;
4、一般情況下用 iconv,只有當遇到無法確定原編碼是何種編碼,或者iconv轉化後無法正常顯示時才用mb_convert_encoding 函數。
php頁面字元集解析的先後順序