小虾虎鱼

小虾虎鱼

PHP解决截取标题长度乱码的问题

作者 禾惠 发表于 2012/07/14,最后修改于 2012/07/14

    在截取文章标题(中英文混合)的时候,往往会出现乱码,例如标题为“PHP 解决截取标题长度乱码的问题”(注意标题中PHP后面多一个空格),如果使用的编码是UTF-8,那么一个中文就相当于三个英文字符,如果我要截取的长度是24个字符,那么截取时会将标题中的“长”给割断导致乱码。以下是本人的解决思路(如果有更好的解决方法请高手指教):

    先获取前面24个字符,计算出这24个字符中有多少个非中文字符,然后将得到的非中文字符数除3取余,如果余数为零不做修改,如果余数为1那么在标题开头补两个空格,如果余数为1那么在标题开头一个空格,得到新的标题后再重新截取,最后去除空格。代码如下:

function cn_substr($string,$len,$l){//字符串,截取的长度,一个中文对应的字节数
    $n=0;
    $length=strlen($string);
    if($length>$len){
        for($i=0;$i<$len;$i++){
            $str1=substr($string,$i,1);
            if(ord($str1)<0x7f){
                $n++;//计算非汉字的个数
            }
        }
        $m=$n%$l;
        switch($m){
            case '1':$string='  '.$string;break;
            case '2':$string=' '.$string;break;
        }
    }
    $string=trim(substr($string,0,$len));
    return $string;
}


穗溪原创,转载请注明 来自于小虾虎鱼 http://www.xiaoboy.com