截取函数,中文一个,英文两个算一个
程序员文章站
2022-05-25 14:57:13
...
截取函数,中文一个,英文两个算一个
共享一个今天写的截取字符串函数,跟官方的不一样,用了你就知道
更多函数参见 http://chajiandaquan.com/function.html
共享一个今天写的截取字符串函数,跟官方的不一样,用了你就知道
/**
* 截取函数,中文一个,英文两个算一个
*/
function mbsubstr($str, $start=0, $length, $suffix=true, $charset="utf-8") {
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
$strArr = $match[0];
$str = array_values(tempStrArr($strArr));
$strArrCount = count($str);
if($strArrCount == $length+1){
$length += 1;
}
$slice = implode('',array_slice($str,$start,$length));
if($strArrCount > $length){
return $suffix ? $slice.'...' : $slice;
}else{
return $slice;
}
}
function tempStrArr($strArr){
$e = range('a','z');
$i = count($strArr);
foreach($strArr as $k=>$v){
if(in_array(strtolower($v), $e)){
if(in_array(strtolower($strArr[$k+1]), $e)){
$strArr[$k] = $v.$strArr[$k+1];
unset($strArr[$k+1]);
break;
}
}elseif($v > 0 && $v 0 && $strArr[$k+1]
$strArr[$k] = $v.$strArr[$k+1];
unset($strArr[$k+1]);
break;
}
$i--;
}
if($i > 0){
$strArr = tempStrArr($strArr);
}
return $strArr;
}
共享这个代码。我总觉得哪里不对劲,有更好的思路的大神求思路更多函数参见 http://chajiandaquan.com/function.html
AD:真正免费,域名+虚机+企业邮箱=0元
上一篇: 存储方式与介质对性能的影响
下一篇: php 怎么判断用户登录了