mb_substr增强,解决中文字符串乱码问题
解决使用mb_substr截取字符串时中文乱码的问题注:mb_substr 可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码
解决使用mb_substr截取字符串时中文乱码的问题
注:mb_substr 可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码问题,因此这个函数就是用来解决这个问题的。
说明:经过个人测试,没有发现问题,如发现问题,请在回复中指出并付上案例,多谢!
注:mb_substr 可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码问题,因此这个函数就是用来解决这个问题的。
说明:经过个人测试,没有发现问题,如发现问题,请在回复中指出并付上案例,多谢!
/**
* 中英文字符截取函数,要求汉字字符编码必须为utf-8
* $offset 跳过的字符个数
* $length 截取的字符数个数
*/
function zh_substr($str, $offset, $length = -1) {
$ret = '';
$bytelen = mb_strlen($str); //字符串的字节数
$start = 0;
$end = 0;
$nums = 0;
$count = 1;
for ( $i = 0; $i < $bytelen; $i++ ) {
if ( $nums == $offset ) {
$start = $i;
break;
}
if ( ord($str{$i}) > 0x80 || $count > 1 ) { //汉字
if ( $count % 3 === 0 ) { //统计出一个汉字
$nums += 1;
$count = 1;
} else {
$count += 1;
}
continue;
}
$nums += 1; //统计出一个英文
}
$nums = 0;
$count = 1;
for ( $i = $start; $i < $bytelen; $i++ ) {
if ( $nums == $length ) {
break;
}
if ( ord($str{$i}) > 0x80 || $count > 1 ) { //汉字
if ( $count % 3 === 0 ) { //统计出一个汉字
$nums += 1;
$count = 1;
$end += 3;
} else {
$count += 1;
}
continue;
}
$nums += 1; //统计出一个英文
$end += 1;
}
$ret = mb_substr($str, $start, $end);
return $ret;
}
- 上一篇:用于Yii的自动加载类地图.
- 下一篇:jpgraph 图表
精彩图集
精彩文章






