今天新学习到的一个php的中文字符串截取函数

今天看别人的代码,新学习到一个php的支持中文字符串截取的函数,写的比较好,所有收藏一下

//统计字符串长度,一个中文按一个长度计算
function zkj_str_len_mixed($str) {
    $length = strlen(preg_replace('/[\x00-\x7F]/', '', $str));
    if ($length) {
        return strlen($str) - $length + intval($length / 3) * 2;
    } else {
        return strlen($str);
    }
}

//字符截取,一个中文按两个英文的长度
function zkj_cut_str_mixed($str, $len,$append=true) {
    if (zkj_str_len_mixed($str) <= $len)
        return $str;
    $n = 0;
    $tempstr = '';
    for ($i = 0; $i < $len; $i++) {
        if (ord(substr($str, $n, 1)) > 224) {
            $tempstr .= substr($str, $n, 3);
            $n += 3;
            $i++; //把一个中文按两个英文的长度计算
        } elseif (ord(substr($str, $n, 1)) > 192) {
            $tempstr .= substr($str, $n, 2);
            $n += 2;
            $i++; //把一个中文按两个英文的长度计算
        } else {
            $tempstr .= substr($str, $n, 1);
            $n++;
        }
    }
    return $tempstr . ($append ? '...' : '');
}

使用范例:

$str = "12345提意见adsf轻松赚积分,123456789";
echo strlen($str);//输出45
echo "----";
echo wl_str_len_mixed($str);//输出36
echo "----";
echo wl_cut_str_mixed($str,8);//输出"12345提意见..."

特别说明:工程编码统一是UTF-8

备注:2013-04-28,修复echo wl_cut_str_mixed($str,8);//输出"12345提意见..."问题

function wl_cut_str_mixed($str, $len,$append=true) {
    if (wl_str_len_mixed($str) <= $len)
        return $str;
    $n = 0;
    $tempstr = '';
    for ($i = 0; $i < $len; $i++) {
        if (ord(substr($str, $n, 1)) > 224) {
            $i++; //把一个中文按两个英文的长度计算
            if($i>=$len){
                break;
            }
            $tempstr .= substr($str, $n, 3);
            $n += 3;
        } elseif (ord(substr($str, $n, 1)) > 192) {
            $i++; //把一个中文按两个英文的长度计算
            if($i>=$len){
                break;
            }
            $tempstr .= substr($str, $n, 2);
            $n += 2;
        } else {
            $tempstr .= substr($str, $n, 1);
            $n++;
        }
    }
    return $tempstr . ($append ? '...' : '');
}

这样

$str = "提意阿德法见adsf轻松赚积分,123456789";
echo wl_cut_str_mixed($str,8,false);//输出:提意阿德
$str = "1提意阿德法见adsf轻松赚积分,123456789";
echo wl_cut_str_mixed($str,8,false);//输出:1提意阿
$str = "12提意阿德法见adsf轻松赚积分,123456789";
echo wl_cut_str_mixed($str,8,false);//输出:12提意阿


你可能感兴趣的:(PHP,字符串,中文,截取,无乱码)