佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 詳解PHP用mb_string處理windows中文字符

詳解PHP用mb_string處理windows中文字符

熱門標(biāo)簽:科大訊飛語音識別系統(tǒng) 銀行業(yè)務(wù) 阿里云 電子圍欄 團(tuán)購網(wǎng)站 Mysql連接數(shù)設(shè)置 Linux服務(wù)器 服務(wù)器配置

我們都知道windows中(當(dāng)然是中文版),文件名和文件內(nèi)容等編碼都是gbk,而我們在開發(fā)過程中,IDE里的編碼則是UTF-8,(這里不討論為什么等等問題,只考慮怎么把編碼轉(zhuǎn)變成一樣的)所以導(dǎo)致我寫的UTF-8編碼的正則模式字符串中的中文在gbk編碼的文件中并不能正確匹配。

一開始,我并沒有什么辦法,試過把PHP腳本文件的編碼也改成GBK,也可以用,但是想到這種方法太low了,所以找一找PHP中有沒有函數(shù)可以滿足我的需求。

這時,我想到了以前在處理windows中的文件名時用的函數(shù)iconv(),其函數(shù)原型如下:

stringiconv(string$in_charset,string$out_charset,string$str)

Performsacharactersetconversiononthestringstrfromin_charsettoout_charset.

我們常使用:

$out_charset='utf-8';

$fileName=iconv($fileName,$out_charset,'gbk');

來處理文件名,將文件名改從gbk改為UTF-8而內(nèi)容不變。

手冊翻譯附加:

  • 如果你在輸出字符串$out_charset后面添加//TRANSLIT即$out_charset='utf-8//TRANSLIT',在遇到不能轉(zhuǎn)換為UTF-8的字符時,程序會自動替換為一個相似字符的UTF-8字符;
  • 如果你在輸出字符串$out_charset后面添加//IGNORE即$out_charset='utf-8//IGNORE',在遇到不能轉(zhuǎn)換為UTF-8的字符時,程序會自動跳過這個字符。
  • 如果你什么都沒加,就在遇到不能替換成UTF-8的字符時,替換會被中斷。

但是,我在用這個函數(shù)處理時,結(jié)果卻是這樣:

意思是iconv()函數(shù)能處理的最大字符數(shù)只有64,一般的文件名大小,而我的文件內(nèi)容很顯然不止64個字符。

沒有辦法,我只好再次各種翻找別的函數(shù)。

直到我發(fā)現(xiàn)了mb_string函數(shù)庫,這個函數(shù)庫一般都在PHP環(huán)境里集成,我們可以在phpinfo()里找到它。

mb_string函數(shù)里有一個mb_convert_encoding()函數(shù),可以將一個字符串的編碼改變,其函數(shù)原型如下:

stringmb_convert_encoding(string$str,string$to_encoding[,mixed$from_encoding])

Convertsthecharacterencodingofstringstrtoto_encodingfromoptionallyfrom_encoding.

基原型跟iconv()函數(shù)差不多,只是它沒有對輸出函數(shù)的后綴修飾,它也沒有對字符串長度的明確限制。

而且我們看到$from_encoding是可選的,它可以自動識別源編碼。

因為找不到一個確切的無法轉(zhuǎn)碼的字符,也不知道它遇到無法轉(zhuǎn)碼的字符會怎么處理。

通過mb_convert_encoding()函數(shù),將整個文件處理了一下,于是,問題順利解決。

最后介紹一下mb_string函數(shù)庫,它全名叫MultibyteString,它的很多方法都擴(kuò)展自PHP自身的string函數(shù)庫,函數(shù)名在原函數(shù)的前面加了"mb_",這些函數(shù)除了擁有原函數(shù)的作用外,還在可選參數(shù)的最后加入了一個$encoding的可選參數(shù),這個參數(shù)可以規(guī)定函數(shù)以什么樣的編碼方式來處理字符串。

例如strpos()函數(shù),找到一個字符串在另一個字符串中的位置。

strpos("歡迎來訪問","問",0)返回的結(jié)果是12,因為腳本是UTF-8編碼,而將字符串轉(zhuǎn)為UTF-8編碼后,每個中文字符會占用3個字節(jié)。

而在mb_strpos()函數(shù)中,mb_strpos("歡迎來訪問","問",0,'utf-8')則會返回4,它會將字符串當(dāng)作已經(jīng)轉(zhuǎn)UTF-8的狀態(tài)執(zhí)行。

而mb_strpos("歡迎來訪問","問",0,'gbk')會返回6

以上就是詳解PHP用mb_string處理windows中文字符的詳細(xì)內(nèi)容,更多關(guān)于PHP用mb_string處理windows中文字符的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 淺談Java中String的常用方法
  • JavaScript JSON.stringify()的使用總結(jié)
  • Java實用工具之StringJoiner詳解
  • golang 的string與[]byte轉(zhuǎn)換方式
  • Java基礎(chǔ)之StringBuffer詳解
  • 詳解java中String值為空字符串與null的判斷方法
  • Java利用StringBuffer替換特殊字符的方法實現(xiàn)
  • golang strings包的Replace的使用說明
  • 詳解如何解決使用JSON.stringify時遇到的循環(huán)引用問題
  • Java中InputSteam怎么轉(zhuǎn)String

標(biāo)簽:萍鄉(xiāng) 江蘇 大理 衡水 棗莊 廣元 蚌埠 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解PHP用mb_string處理windows中文字符》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    静安区| 临江市| 新巴尔虎右旗| 游戏| 晋中市| 乌拉特后旗| 察哈| 丹凤县| 乐至县| 施秉县| 通江县| 枣强县| 普兰县| 安吉县| 安义县| 海林市| 香格里拉县| 尚志市| 新宁县| 日喀则市| 疏勒县| 石景山区| 大方县| 库伦旗| 丹江口市| 阿克| 洞头县| 顺平县| 洪洞县| 乡宁县| 资兴市| 衡水市| 酒泉市| 马关县| 姜堰市| 积石山| 固镇县| 常宁市| 独山县| 进贤县| 修文县|