2023-12-06 分類: 網(wǎng)站建設(shè)
在pHp代碼轉(zhuǎn)換中使用mb_convert_encoding和iconv的說明
更新時(shí)間:2009年12月16日17:43:25作者:
mb_convert_encoding此函數(shù)用于轉(zhuǎn)換編碼。我從不了解程序編碼的概念,但現(xiàn)在似乎有所啟發(fā)。
但是,英語通常不會(huì)出現(xiàn)編碼問題,只有中文數(shù)據(jù)會(huì)出現(xiàn)此問題。例如,當(dāng)您使用Zend Studio或Editplus編寫程序時(shí),將使用gbk編碼。如果需要將數(shù)據(jù)輸入數(shù)據(jù)庫,并且數(shù)據(jù)庫編碼為utf8,則必須對(duì)數(shù)據(jù)進(jìn)行編碼和轉(zhuǎn)換,否則在進(jìn)入數(shù)據(jù)庫時(shí)會(huì)出現(xiàn)亂碼。
有關(guān)mb_convert_encoding的用法,請(qǐng)參見官方文件:
將GbK轉(zhuǎn)換為UTF-8
復(fù)制代碼,代碼如下:
又一個(gè)Gb2312到big5
復(fù)制代碼,代碼如下:
但是,要使用上述功能,需要安裝它,但需要首先啟用mbstring擴(kuò)展庫。
pHp中的另一個(gè)函數(shù)iconv也用于轉(zhuǎn)換字符串編碼,類似于上面的函數(shù)。
下面有一些詳細(xì)的示例:
iconv —將字符串轉(zhuǎn)換為請(qǐng)求的字符編碼
(pHp 4> =4.0.5,pHp5)
mb_convert_encoding —轉(zhuǎn)換字符編碼
(pHp 4> =4.0.6,pHp5)
用法:
字符串mb_convert_encoding(字符串str,字符串to_encoding [,混合from_encoding])
您需要先啟用mbstring擴(kuò)展庫,然后刪除; extension = php_mbstring.dll在前面;在php.ini中
mb_convert_encoding可以指定多種輸入編碼,它將根據(jù)內(nèi)容自動(dòng)識(shí)別,但是執(zhí)行效率比iconv差很多;
字符串iconv(字符串in_charset,字符串out_charset,字符串str)
注意:第二個(gè)參數(shù)除了指定要轉(zhuǎn)換的編碼之外,還可以添加兩個(gè)后綴:// TRANSLIT和// IGNORE,其中// TRANSLIT將自動(dòng)更改無法直接轉(zhuǎn)換為一個(gè)的字符更多類似的字符,// IGNORE將忽略無法轉(zhuǎn)換的字符,默認(rèn)效果是從第一個(gè)非法字符開始切斷。
失敗時(shí)返回轉(zhuǎn)換后的字符串或FALSE。
使用:
發(fā)現(xiàn)iconv將字符“ —”轉(zhuǎn)換為gb2312時(shí)會(huì)出錯(cuò)。如果沒有ignore參數(shù),則無法保存字符后的所有字符串。在任何情況下,該“ —”都無法成功轉(zhuǎn)換,也無法輸出。此外,mb_convert_encoding沒有此錯(cuò)誤。
通常,使用iconv,并且僅在無法確定原始編碼或轉(zhuǎn)換后無法正常顯示iconv時(shí),才使用mb_convert_encoding函數(shù)。
from_encoding由轉(zhuǎn)換前的字符代碼名稱指定。它可以是數(shù)組或字符串逗號(hào)分隔的枚舉列表。如果未指定,則將使用內(nèi)部編碼。
/ *自動(dòng)檢測(cè)JIS,eucjp-win,sjis-win的編碼,然后將str轉(zhuǎn)換為UCS-2LE * /
$ str = mb_convert_encoding($ str,“ UCS-2LE”,“ JIS,eucjp-win,sjis-win”);
/ *“自動(dòng)”擴(kuò)展為“ ASCII,JIS,UTF-8,EUC-Jp,SJIS” * /
$ str = mb_convert_encoding($ str,“ EUC-Jp”,“ auto”);
示例:
復(fù)制代碼,代碼如下:
$ content = iconv(“ GbK”,“ UTF-8”,$ content);
$ content = mb_convert_encoding($ content,“ UTF-8”,“ GbK”);
在pHp中使用mb_convert_encoding轉(zhuǎn)碼的小陷阱
每個(gè)人都熟悉使用mb_convert_encoding()方法進(jìn)行php程序中的字符編碼轉(zhuǎn)換,并且在平時(shí)也大量使用它。總的來說,這種方法也表現(xiàn)出色,值得稱贊。但是在一個(gè)項(xiàng)目中,我們需要使用它將UTF8轉(zhuǎn)換為GbK,并且在轉(zhuǎn)換某些特殊字符時(shí)發(fā)現(xiàn)了一個(gè)小問題。特定的性能是mb將可以在utf8中編碼但不能在gbk中編碼的字符轉(zhuǎn)換為\ 0x00 \ 0x80,這導(dǎo)致轉(zhuǎn)換后的gbk字符有問題。
在我們的思想中,在字符編碼轉(zhuǎn)換過程中,如果遇到目標(biāo)編碼無法表達(dá)的字符,那么代碼轉(zhuǎn)換程序應(yīng)該做的就是丟棄該字符,以便盡管丟失了一些數(shù)據(jù),但是不會(huì)導(dǎo)致轉(zhuǎn)碼的字符序列不可用。尚不清楚mb為什么使用上述方法而不是放棄它。
臨時(shí)解決方案是過濾轉(zhuǎn)碼后的字符串序列php url編碼轉(zhuǎn)換,以過濾掉\ x00 \ 80的所有字符;或在轉(zhuǎn)義之前過濾utf8字符串以過濾出可以表示的ut8和gbk對(duì)于所有無法表示的字符,從實(shí)現(xiàn)難度上來說php url編碼轉(zhuǎn)換,第一種過濾方法相對(duì)容易實(shí)現(xiàn)。
新聞名稱:pHp中的另外一個(gè)函數(shù)iconv也是用來轉(zhuǎn)換編碼的
文章轉(zhuǎn)載:http://m.newbst.com/news37/299337.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、域名注冊(cè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、軟件開發(fā)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容