效率比mb_string要高,尤其是当截取的跨度越大,和substr的效率越接近。不过我个人还是更喜欢用substr($str,$start,$len).chr(0),因为它的效率是最好的,更多时候没有必要对字符串作如此严格的截取。
public function csubstr($str,$start,$len=0){
$strlen=strlen($str);
/*默认取开始到末尾*/
if($len > $strlen - $start || $len <= 0)
$len = $strlen - $start;
if($start >= $strlen)
return $str;
elseif($start < 0)
$start = 0;
/*计算截取字符串的开始位置*/
if($start > 0){
for($i = 0 ; $i < $strlen ; $i++) {
if(ord($str[$i])>0xa0)
$i++;
if($i >= $start){
$start = $i+1;
break;
}
}
}
/*计算截取字符串的後束位置*/
if($start + $len < $strlen){
for($i = 0 ; $i < $strlen ; $i++) {
/*如果是中文字符串,i++*/
if(ord($str[$i])>0xa0)
$i++;
if($i >= $start + $len-1){
$len = $i - $start + 1;
break;
}
}
}
return substr($str,$start,$len);
}




