您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么解決PHP+trim亂碼問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么解決PHP+trim亂碼問題”吧!
PHP trim亂碼是因為在PHP中字符串函數默認都不是multibyte-safe的,其解決辦法就是封裝一個mb_trim函數來解決亂碼即可。
本文操作環境:Windows7系統,PHP7.4版,Dell G3電腦。
如何解決PHP+trim亂碼問題?
PHP的Trim截取亂碼
一直使用Trim過濾首尾兩端的字符串,關于Trim的官方描述:
trim — 去除字符串首尾處的空白字符(或者其他字符)
今天發現一個很奇怪的問題, 代碼如下:
<?php $str = '研發、產品、'; echo trim($str, '、');
猜下這個會返回什么?“研發、產品”?NO,這個居然很奇怪的返回了“研發、產??”。
難道是我的打開方式不對,怎么會返回亂碼呢。
經過一番測試,發現一個很有趣的問題。
<?php echo trim('abacabb', 'ab'); //print 'c'
原本以為這個會返回acabb的,但是居然只返回了c。這就是對trim函數的誤解了。
其實這個在官方說明文檔的Example是有的,只是我沒注意看而已。
trim會循環去掉字符串首位存在的字符。如上面的例子,則執行過程如下:
字符串abacabb會從下標0開始循環,如果存在ab中的字符就去掉,一直到沒有就停止循環。
所以執行為:
循環a存在字符串ab中,去掉,剩下bacabb
循環b存在字符串ab中,去掉,剩下acabb
循環a存在字符串ab中,去掉,剩下cabb
循環c不存在字符串ab中,停止循環,所以去掉首字符就剩下:cabb。
但是trim是過濾首尾字符,所以還會從末尾循環去掉。
循環b存在字符串ab中,去掉,剩下cab,
循環b存在字符串ab中,去掉,剩下ca,
循環a存在字符串ab中,去掉,剩下c,
循環c不存在字符串ab中,停止循環,所以去掉末端字符就剩下:c。
所以整個結束后,abacabb就剩下了c了。看到這里對trim函數有所了解了吧。
好了,說回亂碼的問題,為什么會出現返回亂碼的情況呢。
這是因為在PHP中,字符串函數默認都不是 multibyte-safe 的。如果需要 multibyte-safe 則需要使用mb_系列的函數。
“、”的十六進制碼為0xe3 0x80 0x81,對于不是 multibyte-safe 的函數會把它當做三個字符。
而“品”的十六進制碼為0xe5 0x93 0x81。這里最后一個0x81剛好符合了,被過濾了。所以才會導致出現亂碼的情況。
ok,問題找到了,trim沒有mb函數,但是我們可以自己封裝一個。Function mb_trim。
PS:用了trim好久了,但是一直沒有真正了解。看官方文檔還是很重要的。
到此,相信大家對“怎么解決PHP+trim亂碼問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。