我们经常会遇到需要截取字符串(含中文汉字)长度的情况,比如标题显示不能超过多少字符,超出的长度用…表示,以下函数可以满足你的需求。
代码如下:
/*
Utf-8、gb2312都支持的汉字截取函数
cut_str(字符串, 截取长度, 开始长度, 编码);
编码默认为 utf-8
开始长度默认为 0
*/
function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){
if($code == 'UTF-8'){
$pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/";
preg_match_all($pa, $string, $t_string);
if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
return join('', array_slice($t_string[0], $start, $sublen));
}else{
$start = $start*2;
$sublen = $sublen*2;
$strlen = strlen($string);
$tmpstr = '';
for($i=0; $i<$strlen; $i++){
if($i>=$start && $i<($start+$sublen)){
if(ord(substr($string, $i, 1))>129){
$tmpstr.= substr($string, $i, 2);
}else{
$tmpstr.= substr($string, $i, 1);
}
}
if(ord(substr($string, $i, 1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
return $tmpstr;
}
}
使用方法如下:
$str = "jQuery插件实现的加载图片和页面效果";
echo cutStr($str,16);
/**
* 中文字符串截取
* @param $str
* @param int $start @起始位置
* @param $length @截取长度
* @param string $ending @结尾符
* @return string
*/
private static function stringSubstr($str, $start=0, $length, $ending=''){
//$str = htmlspecialchars_decode($str); //实体字符转为html
$str = trim(strip_tags($str)); //去除html字符
$str = preg_replace("/\s| | /", "", $str);
$mb_str = mb_substr($str, $start, $length, 'utf-8');
if($length < method::abslength($str)){
$output = $mb_str.$ending;
}else{
$output = $mb_str;
}
return $output;
}
/**
* 可以统计中文字符串长度的函数
* @param $str @要计算长度的字符串
* @return int @计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
*/
private static function abslength($str){
if(empty($str)){
return 0;
}
if(function_exists('mb_strlen')){
return mb_strlen($str,'utf-8');
} else {
preg_match_all("/./u", $str, $ar);
return count($ar[0]);
}
}