首頁 > 後端開發 > php教程 > php字元截取中文防亂碼用.chr(0)解決的方法

php字元截取中文防亂碼用.chr(0)解決的方法

PHP中文网
發布: 2016-07-25 08:57:09
原創
1392 人瀏覽過

PHP程式碼

<?php    
$len = 19;    
$text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";    
echo strlen($text)<=$len ? $text : (substr($text,0,$len).chr(0)."....");    
?>
登入後複製

chr(0)不是null 

null是什麼都沒有,而chr(0)的值是0。表示成16進位是0x00,表示成二進位是00000000 

雖然chr(0)不會顯示出什麼,但是他是一個字元。 

當漢字被截斷時,根據編碼規則他總是要把後邊的其他字符拉過來一起作為漢字解釋,這就是出現亂碼的原因。而值為0x81到0xff與0x00組合始終都顯示為「空」 

根據此特點,在substr的結果後面補上一個chr(0),就可以防止出現亂碼了 

註: 

編碼第一位元組第二位元組 

gb2312 0xa1-0xf7 0xa1-0xfe 

gbk 0xa1-0xfe 

gbk 0x81-0xfe >

big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e

 

另一種方法: 

PH🎜>PH適用於gb2312 編碼,如果是UTF-8 的話需要把第4行改為 
function csubstr($text, $limit) {    
    $s = &#39;;    
    for($i=0;$i< $limit-3;$i++) {    
        $s .= ord($text[$i])>127 ? $text[$i].$text[++$i] : $text[$i];    
    }    
    return $s;    
}
登入後複製

 

PHP代碼

$s .= ord($text[$i] )>127 ? $text[$i].$text[++$i].$text[++$i] : $text[$i];   

UTF-8 中的漢字是3個位元組。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板