PHP trim()是一個(gè)非常有用的字符串函數(shù),可以用于去除一個(gè)字符串兩邊的空格或特定字符。但是,在處理中文字符串時(shí),trim()經(jīng)常會(huì)遇到亂碼的問題。例如,下面的代碼:
$str = ' 測(cè)試 '; $str2 = trim($str); echo $str2;
預(yù)期的結(jié)果應(yīng)該是'測(cè)試',但是實(shí)際輸出卻是'? 測(cè)試 ?',其中的亂碼就是由于中文字符被誤認(rèn)為是多字節(jié)字符造成的。
這個(gè)問題的根源在于,trim()默認(rèn)使用ASCII碼表對(duì)字符串進(jìn)行處理,而中文字符通常需要使用UTF-8編碼。因此,我們需要先將字符串轉(zhuǎn)換為UTF-8編碼再使用trim()函數(shù)。
這里提供兩種解決方法:
方法一
使用mb_convert_encoding()函數(shù)將字符串從當(dāng)前編碼轉(zhuǎn)換為UTF-8編碼,再使用trim()函數(shù)。例如:
$str = ' 測(cè)試 '; $str2 = trim(mb_convert_encoding($str, 'UTF-8')); echo $str2;
輸出結(jié)果為'測(cè)試',亂碼問題得到了解決。
方法二
在PHP 5.3及以上版本中,trim()函數(shù)新增了第二個(gè)可選參數(shù)charlist,用于指定需要去除的字符。可以利用這個(gè)參數(shù)指定UTF-8編碼下的空格字符和換行字符進(jìn)行去除。例如:
$str = ' 測(cè)試 '; $str2 = trim($str, " \t\n\r\0\x0B "); echo $str2;
其中," \t\n\r\0\x0B"表示ASCII碼表下的空格字符和換行字符,而" "是UTF-8編碼下的空格字符。輸出結(jié)果為'測(cè)試'。
除了在trim()函數(shù)中使用charlist參數(shù)之外,還可以在傳入字符串時(shí)使用str_replace()函數(shù)將中文空格字符替換為ASCII空格字符。例如:
$str = ' 測(cè)試 '; $str = str_replace(' ', ' ', $str); //將中文空格字符替換為ASCII空格字符 $str2 = trim($str); echo $str2;
同樣的,輸出結(jié)果為'測(cè)試'。
綜上所述,對(duì)于PHP trim()亂碼的問題,我們可以通過轉(zhuǎn)換編碼或指定charlist參數(shù)進(jìn)行解決。使用中文空格字符時(shí),可以將其替換為ASCII空格字符。