PHP实现截取字符串的通用方法

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

/**
  * 截取字符串
  * params $string 要截取的字符串
  * params $length: 保留长度(字符数)
  * params $dot: 多余部分显示
**/
function _cutstr($string, $length, $dot = ' ...') {
    if(strlen($string) <= $length) {
        return $string;
    }
    $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
    $strcut = '';
    $n = $tn = $noc = 0;
    while($n < strlen($string)) {    
        $t = ord($string[$n]);
        if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
            $tn = 1; $n++; $noc++;
        } elseif(194 <= $t && $t <= 223) {
            $tn = 2; $n += 2; $noc += 2;
        } elseif(224 <= $t && $t < 239) {
            $tn = 3; $n += 3; $noc += 2;
        } elseif(240 <= $t && $t <= 247) {
            $tn = 4; $n += 4; $noc += 2;
        } elseif(248 <= $t && $t <= 251) {
            $tn = 5; $n += 5; $noc += 2;
        } elseif($t == 252 || $t == 253) {
            $tn = 6; $n += 6; $noc += 2;
        } else {
            $n++;
        }    
        if($noc >= $length) {
            break;
        }    
    }
    if($noc > $length) {
        $n -= $tn;
    }
    $strcut = substr($string, 0, $n);        
    $strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
    return $strcut.$dot;
}