解决rtrim产生乱码的问题
2016-05-26 19:59
417 查看
1、问题重现
$item = '3×魔力之源、300×10钻石、300000×金币、';var_dump( rtrim('、', $item) );
string '3×魔力之源、300×10钻石、300000×金��' (length=47)
2、原因
rtrim函数把参数都转成了UTF8后再进行比较。对于中文,一般都是先转成Unicode,再根据下表转成UTF8。
UCS-4(UNICODE)编码 | UTF-8字节流 |
U-00000000 – U-0000007F | 0xxxxxxx |
U-00000080 – U-000007FF | 110xxxxx 10xxxxxx |
U-00000800 – U-0000FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
U-00010000 – U-001FFFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
U-00200000 – U-03FFFFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
U-04000000 – U-7FFFFFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
“、”的Unicode为\u3001,转成二进制 11000000000001,转成UTF8为11100011 10000000 10000001;
rtrim是一个一个字节过滤的,可见“币”的UTF8最后变成了11100101 10111000,导致出现了乱码。
3、解决方法
var_dump(mb_substr($item,0,-1,'utf-8'));
string '3×魔力之源、300×10钻石、300000×金币'
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- rem : web app适配的秘密武器
- php7 读取php.ini[4]
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得