mb_strlen截取中文乱码问题

本文探讨了在不同环境下PHP的mb_strlen函数处理中文字符串时出现乱码的状况,问题根源在于编码格式不一致。通过检查mb_internal_encoding()函数返回的编码为ISO-8859-1,而非预期的UTF-8。解决方案是在执行截取操作前设置内部编码为UTF-8,从而确保正确截取中文字符。提供的示例代码展示了如何在隐藏个人敏感信息(如手机号、地址和姓名)时避免乱码问题。
摘要由CSDN通过智能技术生成

mb_strlen截取中文乱码问题 本地环境没有问题 另一个环境有问题

另一个环境上 mbstring扩展有的  

var_dump(mb_internal_encoding()); // string(10) "ISO-8859-1"

编码格式的问题 

没有修改默认配置

执行截取前 加上mb_internal_encoding("UTF-8");  

截取正常了

 

function hiddenPart($str, $type = 'mobile')
{
    if (!$str) {
        return $str;
    }

    mb_internal_encoding("UTF-8");
    $len = mb_strlen($str);

    switch ($type) {
        case 'addr':
            $len = mb_strlen($str);
            $start = mb_strpos($str, '区');
            if ($start === false) {
                $start = $len - 8;
            } else {
                $start++;
            }
            if ($start < 0) {
                $start = 0;
            }
            return mb_substr($str, 0, $start) . '********';
            break;

        case 'name':
            return mb_substr($str, 0, 1) . '***';
            break;
        
        default:
            $start = floor($len/2) - 2;
            if ($start < 0) {
                $start = 0;
            }
            return mb_substr($str, 0, $start) . '****' . mb_substr($str, $start + 4);
            break;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值