php mbsubstr 中文乱码,mb_substr增强,解决中文字符串乱码问题

本文提供了一个解决使用mb_substr函数在处理含有中英文混合的字符串时可能出现中文乱码问题的PHP函数。该函数通过计算字节长度来准确截取字符串,确保在截取过程中不会出现乱码。函数名为zh_substr,适用于UTF-8编码的字符串。经过作者测试,该函数在各种情况下表现良好。
摘要由CSDN通过智能技术生成

解决使用mb_substr截取字符串时中文乱码的问题 注:mb_substr可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码问题,因此这个函数就是用来解决这个问题的。 说明:经过个人测试,没有发现

解决使用mb_substr截取字符串时中文乱码的问题

注:mb_substr 可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码问题,因此这个函数就是用来解决这个问题的。

说明:经过个人测试,没有发现问题,如发现问题,请在回复中指出并付上案例,多谢!

/**

* @author zhangqiang

* 中英文字符截取函数,要求汉字字符编码必须为utf-8

*

* @param int $offset 跳过的字符个数

* @param int $length 截取的字符数个数

* @return $ret 返回截取后的字符串

*/

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;

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>