php 对于utf-8 格式下 substr出现截取乱码的处理

现在大部分编程环境及文件格式都是utf-8编码的

在使用php的substr方法截取某个带中文的string时,会发生截取错误(因为一个中文长度为3)

utf8RTrim方法可以使截取后的字符串恢复正常

public  utf8RTrim ( $str ) {
        if ( $str == null ) {
            return "";
        }
        $new = "";
        $pos = 0;
        $len = strlen($str);
        while ( $pos < $len ) {
            $ch = ord($str[$pos]);
            $mask = $ch & 0xf0;
            if ( $mask == 0xf0 ) {
                $pos += 4;
            } elseif ( $mask == 0xe0 ) {
                $pos += 3;
            } elseif ( $mask == 0xc0 ) {
                $pos += 2;
            } else {
                $pos ++;
            }
            if ( $pos - 1 < $len ) {
                $last = $pos - 1;
            }
        }
        if ( $last + 1 >= 0 ) {
            $new = substr($str, 0, $last + 1);
        }
        return $new;
    }


例子:

$str = "hello你好";

echo utf8RTrim(substr($str, 0, 6));  // hello

echo utf8RTrim(substr($str, 0,8));  // hello你

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值