漢字中文使用php自帶函數截取有時會碰到有問號了,下面我們整理了幾個非常不錯的漢字中文精確截取實例。
php在操作字符串的問題時間無非兩個問題:
1.判斷字符串編碼是gbk還是unicode。
2.對相應編碼采取相應截取方法。
一般情況下我們使用substr截取漢字可能會遇到亂碼問題。因為漢字是雙字節的,當被截取了一個字節時,這個漢字就無法顯示,亂掉了。
其實解決很簡單,看下面的截取函數:
代碼如下 復制代碼//截取超長字符串
function curtStr($str,$len=30){
if(strlen($str)>$len){
$str = substr($str,0,$len);
$str .= chr(0) ."…";
return $str;
}
上面的chr(0)不是null
null是什麼都沒有,而chr(0)的值是0。表示成16進制是0×00,表示成二進制是00000000
雖然chr(0)不會顯示出什麼,但是他是一個字符。
當漢字被截斷時,根據編碼規則他總是要把後邊的其他字符拉過來一起作為漢字解釋,這就是出現亂碼的原因。而值為0×81到0xff與0×00組合始終都顯示為“空”
根據這一特點,在substr的結果後面補上一個chr(0),就可以防止出現亂碼了
下面補充幾個函數即可實現此兩點以達到精確截取中文字符串的目的:
截取utf8編碼的多字節字符串
代碼如下 復制代碼 <?php
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.
'((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
?>
UTF-8、GB2312都支持的漢字截取函數
代碼如下 復制代碼 <?php