今天看别人的代码,新学习到一个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提意阿