Saber 酱的抱枕

Fly me to the moon

07/21
2016
学习

php截取中文不乱码的代码

php中最常用的截取文字的函数是substr(),但是在该函数中,中文占用2个或3个长度,所以可能把汉字截断,产生乱码。

有一个办法是使用mb_substr()来截取文字。这样确实可以,因为mb_substr()把所有文字都当做一个长度,所以截取中文时是整个字截取的,不会乱码。但mb_substr()的长度计算方法和substr()不同,有时候反而不能用它。经过一番苦搜,我找到了用php的ord()函数来截取文字的办法。

这种方法的字数计算方法和substr()一致,但不会导致汉字被截断.如果指定的长度会截断汉字,它会把因截断而产生的残缺汉字扔掉(以最后截取出来的长度有可能会比指定的长度少一两位。)。

另外它的参数也只有两个,一个是字符串,一个是截取长度。没错,它不能指定起始位置。

GBK版本:

function gb2312_substr($str, $limit) {
    $restr ='';
    for($i=0;$i< $limit-3;$i++) {
        $restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
    }
    return $restr;
}

UTF-8版本:

function utf8_substr($str, $limit) {
    $restr = '';
    for($i=0;$i< $limit-3;$i++) {
        $restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
    }
    return $restr;
}

php截取中文不乱码的代码