php截取utf8字符串和gbk字符串函数
在 PHP 中,我们直接使用PHP strlen函数进行字符串截取,对于英文字符,没有什么区别,输出的结果都是一样的,而在截取中文时,却有一点小小的问题,我们知道,字符分为两种状态,一种是 gbk 字符串,另一种就是 utf-8 字符串,如果按照常规的输出方法,输出的结果是不一样的。
php strlen 函数最基本的参数有 str 字符串,len 长度,start 开始位置,如果截取的字符串 gbk 格式,那么 len 的步长为 1,截取“番茄博客”,只取前两个字符,输出就是“夏日”,而截取的字符串类型是 utf-8 格式的话,那么 len的步长则为 2,输出的结果为“夏日博”,这也就是两种格式输出不一样的原因。
简要说明一下截出输入的步长,以“番茄博客”为例,步长从 0 开始,从开始的“夏”之前开始算起,第一步为0,则“夏”之后为第二步为 1,依此类推。
依照上述原理,我们可以写一个同时支持截取 gbk 和 utf-8 字符的函数,如下:
[code lang="php"]
0x80){
for($j=$i;$j<=$i+$step;$j++){
$char .= $string[$j];
}
$i+=$step;
}else{
$char = $string[$i];
}
$index++;
if($index>=$start){
$length--;
$result .= $char;
}
}else{
break;
}
}
return $result;
}
}
echo cn_substr("败鸟先飞",2,0,"utf-8"); //使用方法
?>
[/code]