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