在編寫php的時(shí)候,總會(huì)遇到編碼的問(wèn)題,對(duì)于php頁(yè)面的編碼(不考慮參數(shù)的編碼)解析順序是怎么樣的?
目前創(chuàng)新互聯(lián)建站已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、津南網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
首選確定影響頁(yè)面編碼的因素有一下幾點(diǎn):
1、文件的編碼方式
2、Apache2的默認(rèn)字符集設(shè)置
3、PHP.ini中的默認(rèn)字符集的設(shè)置
4、PHP腳本中手動(dòng)輸出header(‘Content-type:text/html;charset=xxx’);
5、html頁(yè)面中加入
參考互聯(lián)網(wǎng)上資料,給出的答案如下:
php.ini默認(rèn)字符集設(shè)置 > header函數(shù)字符集設(shè)置 > apache2默認(rèn)字符集設(shè)置 > meta標(biāo)簽字符集設(shè)置
對(duì)于變量需要轉(zhuǎn)換編碼,PHP提供了iconv和mb_convert_encoding,其實(shí)兩個(gè)都是字符串轉(zhuǎn)碼。
說(shuō)明:string iconv ( string in_charset, string out_charset, string str ),將字符串 str 從 in_charset 轉(zhuǎn)換編碼到 out_charset。
說(shuō)明:string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] ),將 string 類型 str 的字符編碼從可選的 from_encoding 轉(zhuǎn)換到 to_encoding。
兩個(gè)的主要區(qū)別,參考了一下其他網(wǎng)站,主要解釋如下:
1、mb_convert_encoding() 該函數(shù)會(huì)根據(jù)內(nèi)容自動(dòng)識(shí)別編碼,但是執(zhí)行效率比iconv差;
2、然后有一種說(shuō)法就是iconv()在一些字符轉(zhuǎn)換下會(huì)不正常,網(wǎng)上有種說(shuō)法就是:發(fā)現(xiàn)iconv在轉(zhuǎn)換字符”—”到gb2312時(shí)會(huì)出錯(cuò),如果沒(méi)有ignore參數(shù),所有該字符后面的字符串都無(wú)法被保存。不管怎么樣,這個(gè)”—”都無(wú)法轉(zhuǎn)換成功,無(wú)法輸出。 另外mb_convert_encoding沒(méi)有這個(gè)bug;
3、mb_convert_encoding()是PHP擴(kuò)展函數(shù),要開(kāi)啟擴(kuò)展庫(kù)才能用;而iconv是PHP內(nèi)置函數(shù),不需另外開(kāi)啟擴(kuò)展庫(kù)就可以使用;
4、一般情況下用 iconv,只有當(dāng)遇到無(wú)法確定原編碼是何種編碼,或者iconv轉(zhuǎn)化后無(wú)法正常顯示時(shí)才用mb_convert_encoding 函數(shù)。