function subString($str, $start, $length=0) {
//整个字符串的长度
$len = stringLen($str);
$i = 0;//字符串编码的偏移量
//完整排除之前的UTF8字符
$pre = 0;//字符串的偏移量
while($i < strlen($str) && $pre < $start ) {
$ord = ord($str{$i});
if($ord < 192) {
$i++;
} elseif($ord <224) {
$i += 2;
} else {
$i += 3;
}
$pre++;
}
$j = 0;//已经截取的字符串长度
//开始截取
$result = '';
$length = $length == 0 ? $len : $length;
while($j < $length && $i < strlen($str)) {
$ord = ord($str{$i});
if($ord < 192) {
$result .= $str{$i};
$i++;
} elseif($ord <224) {
$result .= $str{$i}.$str{$i+1};
$i += 2;
} else {
$result .= $str{$i}.$str{$i+1}.$str{$i+2};
$i += 3;
}
$j++;
}
return $result;
}
function stringLen($str){
$i = 0;
$len = 0;//整个字符串的长度
while($i < strlen($str)){
$ord = ord($str{$i});
if($ord < 192) {
$i++;
} elseif($ord <224) {
$i += 2;
} else {
$i += 3;
}
$len ++;
}
return $len;
}
function cutString($str, $length){
$len = stringLen($str);
if($length < $len){
$res = subString($str, 0, $length) . '...';
}else{
$res = $str;
}
return $res;
}
$str = "1中.国b你\$s好";
echo cutString($str,5);
exit;
php utf8 截取字符串(支持中文)
最新推荐文章于 2021-03-13 06:27:46 发布