PHP在UTF8編碼下去掉全形空格的曲線方法。。。。
阿新 • • 發佈:2018-11-14
找了很多。多是用正則來替換,但是都失敗了,無奈想了下一種曲線方式,非常規的方式
先看看下面的程式碼:
看看手冊中對bin2hex的函式說明
echo bin2hex(" ");//e38080
程式碼中返回的全形的空格十六進位制程式碼。看看手冊中對bin2hex的函式說明
返回 ASCII 字串,為引數 str
的十六進位制表示。轉換使用位元組方式,高四位位元組優先。
我們接著看下面的程式碼:
echo bin2hex(" 這個是測試的 ");//20e38080e8bf99e4b8aae698afe6b58be8af95e79a84e38080
這段程式碼返回了一串字串,我們只需要替換掉 e38080這個,其中開頭的20 ,是半形的空格,去掉之後的字串是:echo str_replace("e38080","",bin2hex(" 這個是測試的 "));//注意,這裡沒有去掉半形的空格
//20e8bf99e4b8aae698afe6b58be8af95e79a84
那麼我們怎麼還原這個字串呢?bin2hex返回的是 ASCII 字串 UTF8在對中文編碼時需要佔用3個位元組在手冊的評論中,有人寫了個函式hex2bin
function hex2bin($hexdata) {
for ($i=0;$i<strlen($hexdata);$i+=2) {
$bindata.=chr(hexdec(substr($hexdata,$i,2)));
}
return $bindata;
}
echo hex2bin(str_replace("e38080","",bin2hex(" 這個是測試的 ")));
這樣就去掉了全形的空格。