php頁面字元集解析的先後順序

來源:互聯網
上載者:User

標籤: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頁面字元集解析的先後順序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.