改造phpcms-v9自带的字符串截取函数

来自:互联网
时间:2018-08-26
阅读:

phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中:

/**  
 * 字符截取 支持UTF8/GBK  
 * @param $string  
 * @param $length  
 * @param $dot  
 */   
function str_cut($string, $length, $dot = '...') {   
    $strlen = strlen($string);   
    if($strlen <= $length) return $string;   
    $string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);   
    $strcut = '';   
    if(strtolower(CHARSET) == 'utf-8') {   
        $length = intval($length-strlen($dot)-$length/3);   
        $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);   
    } else {   
        $dotlen = strlen($dot);   
        $maxi = $length - $dotlen - 1;   
        $current_str = '';   
        $search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');   
        $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');   
        $search_flip = array_flip($search_arr);   
        for ($i = 0; $i < $maxi; $i++) {   
            $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];   
            if (in_array($current_str, $search_arr)) {   
                $key = $search_flip[$current_str];   
                $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);   
            }   
            $strcut .= $current_str;   
        }   
    }   
    return $strcut.$dot;   
}   
   
//weiyanhui自己添加,字符串截取函数,建议使用自己写的字符串截取函数,需要在php.ini中开启php_mbstring.dll扩展   
function str_cut1($string, $length, $dot = '...') {   
    return mb_substr($string,0,$length,'utf-8').$dot;   
}

echo str_cut1("abcdefg",3,"...");//结果:abc...

echo str_cut1("我们都是中国人",3,"...");//结果:我们都...

不管是字母还是中文,都截取指定的长度。

返回顶部
顶部