现在的位置: 首页 > PHP开发 > 正文
utf-8编码字符串按字节长度截取的php函数
2013年02月26日 PHP开发 ⁄ 共 1616字 暂无评论 ⁄ 被围观 1,243 views+

变量解释: 
       
  • $noc 控制截取字符个数,如果统一$noc +=2,同gbk编码截取,如统一为$noc++,则为按照字符数量截取
           
  • $n 截取字符串的实际字节长度
           
  • $tn 字符的字节长度, 如: 在utf-8编码中,一个中文字符所占字节数为3
function strcut($string, $length, $dot = '...',$charset='utf-8'){
    $strlen = strlen($string);
    if($strlen <= $length) return $string;
    $strcut = '';
    if(strtolower($charset) == 'utf-8')
    {
        $n = $tn = $noc = 0;
        while($n < $strlen)
        {
            $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 += 3;
            } elseif(240 <= $t && $t <= 247) {
                $tn = 4; $n += 4; $noc += 4;
            } elseif(248 <= $t && $t <= 251) {
                $tn = 5; $n += 5; $noc += 5;
            } elseif($t == 252 || $t == 253) {
                $tn = 6; $n += 6; $noc += 6;
            } else {
                $n++;
            }
            if($noc >= $length) break;
        }
        if($noc > $length) $n -= $tn;
        $strcut = substr($string, 0, $n);
    }
    else
    {
        $dotlen = strlen($dot);
        $maxi = $length - $dotlen - 1;
        for($i = 0; $i < $maxi; $i++)
        {
            $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
        }
    }
    return $strcut.$dot;

}

示例:
        $str = 'KPI绩效管理——如何通过绩效管理建立集团公司有效的监控体系 随着90年代全球化与信息化改变了企业竞争的环境,也改变了企业竞争的规则,任何一个公司只要在企业治理机制的某一方面存在缺陷或处于劣势';
        echo strcut($str,10,'');
        
        结果输出为: KPI绩效
        (字符串字节长度为9<=10; 如加入汉字"管"则截取字节长度将为12超过10,不合要求)

给我留言

您必须 [ 登录 ] 才能发表留言!