新聞中心
本文操作環(huán)境:Windows7系統(tǒng),php7.4版,Dell G3電腦。

創(chuàng)新互聯(lián)公司長(zhǎng)期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為新寧企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、做網(wǎng)站,新寧網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
如何解決PHP+trim亂碼問題?
PHP的Trim截取亂碼
一直使用Trim過濾首尾兩端的字符串,關(guān)于Trim的官方描述:
trim — 去除字符串首尾處的空白字符(或者其他字符)
今天發(fā)現(xiàn)一個(gè)很奇怪的問題, 代碼如下:
猜下這個(gè)會(huì)返回什么?“研發(fā)、產(chǎn)品”?NO,這個(gè)居然很奇怪的返回了“研發(fā)、產(chǎn)??”。
難道是我的打開方式不對(duì),怎么會(huì)返回亂碼呢。
經(jīng)過一番測(cè)試,發(fā)現(xiàn)一個(gè)很有趣的問題。
原本以為這個(gè)會(huì)返回acabb的,但是居然只返回了c。這就是對(duì)trim函數(shù)的誤解了。
其實(shí)這個(gè)在官方說明文檔的Example是有的,只是我沒注意看而已。
trim會(huì)循環(huán)去掉字符串首位存在的字符。如上面的例子,則執(zhí)行過程如下:
字符串a(chǎn)bacabb會(huì)從下標(biāo)0開始循環(huán),如果存在ab中的字符就去掉,一直到?jīng)]有就停止循環(huán)。
所以執(zhí)行為:
-
循環(huán)a存在字符串a(chǎn)b中,去掉,剩下bacabb
-
循環(huán)b存在字符串a(chǎn)b中,去掉,剩下acabb
-
循環(huán)a存在字符串a(chǎn)b中,去掉,剩下cabb
-
循環(huán)c不存在字符串a(chǎn)b中,停止循環(huán),所以去掉首字符就剩下:cabb。
但是trim是過濾首尾字符,所以還會(huì)從末尾循環(huán)去掉。
-
循環(huán)b存在字符串a(chǎn)b中,去掉,剩下cab,
-
循環(huán)b存在字符串a(chǎn)b中,去掉,剩下ca,
-
循環(huán)a存在字符串a(chǎn)b中,去掉,剩下c,
-
循環(huán)c不存在字符串a(chǎn)b中,停止循環(huán),所以去掉末端字符就剩下:c。
所以整個(gè)結(jié)束后,abacabb就剩下了c了??吹竭@里對(duì)trim函數(shù)有所了解了吧。
好了,說回亂碼的問題,為什么會(huì)出現(xiàn)返回亂碼的情況呢。
這是因?yàn)樵赑HP中,字符串函數(shù)默認(rèn)都不是 multibyte-safe 的。如果需要 multibyte-safe 則需要使用mb_系列的函數(shù)。
“、”的十六進(jìn)制碼為0xe3 0x80 0x81,對(duì)于不是 multibyte-safe 的函數(shù)會(huì)把它當(dāng)做三個(gè)字符。
而“品”的十六進(jìn)制碼為0xe5 0x93 0x81。這里最后一個(gè)0x81剛好符合了,被過濾了。所以才會(huì)導(dǎo)致出現(xiàn)亂碼的情況。
ok,問題找到了,trim沒有mb函數(shù),但是我們可以自己封裝一個(gè)。Function mb_trim。
PS:用了trim好久了,但是一直沒有真正了解??垂俜轿臋n還是很重要的。
分享標(biāo)題:如何解決PHP+trim亂碼問題
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/dhcsjoh.html


咨詢
建站咨詢
