[原创] rtrim() 格式化中文问题

先看以下代码

var_dump(rtrim("互联网产品、", "、"));

我们以为会得到结果 "互联网产品", 但实际上获得的是 ""互联网产��"

为什么呢, 其实这是编码引起的问题.

rtrim() 这个函数在处理字符时是按照ascii编码来处理, 先看一下 "互联网产品、" 的编码:

$str = "互联网产品、";
for ($i = 0; $i < strlen($str); $i++) {
    echo decbin(ord($str[$i])) . PHP_EOL;
}

/* Output
11100100
10111010
10010010
11101000
10000001
10010100
11100111
10111101
10010001
11100100
10111010
10100111
11100101
10010011
10000001
11100011
10000000
10000001
*/

可以看出中文"品"的utf-8编码是 "11100101 10010011 10000001", 而中文符号 "、" 的utf-8编码是 "11100011 10000000 10000001"

因此 rtrim() 在处理时会一并将 "品" 截掉最后一个字节, 剩下 "11100101 10010011", 从而引起乱码的问题.

转载于:https://www.cnblogs.com/youjiaxing/p/10794301.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值