php用substr截取中文时经常会出现乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了PHP substr中文乱码

当然,php会给出官方的解决办法。mb_substr 和 mb_substr,需要在php.ini中打开php_mbstring扩展,在PHP环境下将php_mbstring.dll前面的分号去掉即可.

mb_substr用法


 echo mb_substr("中华人民共和国",0,4,"utf-8"); //视为字符流

输出结果:

中华人民

如果你买的是虚拟主机可能无法更改服务器配置(需要在php.ini中打开php_mbstring.dll),这是蛋疼的问题。所以写了个函数,希望能帮到大家


function m_substr($string, $beginIndex, $length){
    if(strlen($string) < $length){
        return substr($string, $beginIndex);
    }
 
    $char = ord($string[$beginIndex + $length - 1]);
    if($char >= 224 && $char <= 239){
        $str = substr($string, $beginIndex, $length - 1);
        return $str;
    }
 
    $char = ord($string[$beginIndex + $length - 2]);
    if($char >= 224 && $char <= 239){
        $str = substr($string, $beginIndex, $length - 2);
        return $str;
    }
 
    return substr($string, $beginIndex, $length);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*