Heim  >  Artikel  >  Backend-Entwicklung  >  php字符截取中文防乱码用.chr(0)解决的方法

php字符截取中文防乱码用.chr(0)解决的方法

PHP中文网
PHP中文网Original
2016-07-25 08:57:091334Durchsuche

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 0x81-0xfe 0x81-0xfe 0x40-0x7e 

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

 

另一种方法: 

PHP代码

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;    
}

以上仅适用于 gb2312 编码,如果是UTF-8 的话需要把第4行改为 

 

PHP代码

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

UTF-8 中的汉字是 3 个字节。


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn