PHP的trim和preg_replace导致乱码的问题及解决
来源:互联网 发布:倩女幽魂有没有mac版 编辑:程序博客网 时间:2024/05/16 23:45
trim问题发现
某天,线上展示的数据,发现多了问号,一排查,上游数据里多了0xC2和0xA0,百度查了一下,说是UTF8格式的空格,对应 网页里的 这个东东。
ok,问题找到了,简单对数据做一个trim就好了嘛,于是代码改成:
$name = trim($name, chr(0xc2) . chr(0xa0));
嗯,这么简单的代码还测试啥,上线吧!
结果,当天就有负责审核的同学找来了,怎么数据都会少字啊,比如漫画变成了漫,画字不见了……
var_dump(trim('平安普惠', chr(0xc2) . chr(0xa0)));// 打印结果是 平安普,少了一个惠字
查了一下资料,原来php默认不能正确处理多字节字符,比如中文,如果要处理中文,要用mb_开头的函数,参考:http://php.net/manual/zh/ref.mbstring.php
可是,问题来了,没有 mb_trim这样的函数啊啊啊!
还好,上面的页面里也给了解决方案,用正则+utf8模式代替,嗯,php官方参考页面有其它用户提供了解决方案:
function mb_trim($string, $trim_chars = '\s'){ return preg_replace('/^['.$trim_chars.']*(?U)(.*)['.$trim_chars.']*$/u', '\\1',$string);}
好吧,我稍微优化了一下,变成:
function mb_trim($string){ return preg_replace('/(^\s*)|(\s*$)/u', '', $string);}
这回不能盲目上线了,对库中400万的数据遍历测试了一轮,果然出问题了,
$str = '破千魂';$str2 = mb_trim($str);var_dump($str2); // str2变成了NULL
查了半天资料,没有结论,后面想到\s*,即使没有空格也会进行替换,效率不好,改成\s+,结果就ok了,汗,最终的mb_trim函数定义如下:
function mb_trim($string){ // u模式符表示 字符串被当成 UTF-8处理 return preg_replace('/(^\s+)|(\s+$)/u', '', $string);}
后语,为啥\s*会出错呢?偶然发现在php5.2版本上,\s*也能正常工作,hhvm下也是正常的,
再看我出问题的php,是5.4.33,赶紧去官网重新下载了一个5.4.45(php5.4最后一个版本),编译并测试后,发现结果也是正常的,重新下载5.4.33编译,问题依旧,
至此,确认那是php5.4.33的一个bug了,不过最后那个版本的mb_trim还是能正常工作的。
记录下来。
阅读全文
0 0
- PHP的trim和preg_replace导致乱码的问题及解决
- PHP的Trim截取乱码
- PHP preg_replace的使用
- [PHP]解决PHP和MySQL的中文乱码问题
- php解析XML和AJAX时乱码问题的解决
- 解决Eclipse编码问题导致乱码问题的插件
- 解决ubuntu16.04中vim和gedit乱码以及fcitx卸载残余导致的问题
- 解决AJAX传送中文会导致乱码的问题
- 解决AJAX传送中文会导致乱码的问题
- 解决部署服务器时传参乱码导致的问题
- 解决Spring Security导致的前后台传值乱码问题
- 解决php URL地址传输乱码问题和下载文件名乱码的问题
- php的trim函数遇到的问题
- PHP程序和MySql数据乱码问题原因及解决
- PHP mysql乱码问题的解决
- php中解决乱码 的问题
- php中乱码问题的解决
- smtp.php 解决标题乱码的问题
- https
- Storm安装笔记
- Django unittest 设置跳过某些case
- js把for循环出来的数据存入数组
- matlab2c使用c++实现matlab函数系列教程-sum函数
- PHP的trim和preg_replace导致乱码的问题及解决
- Android—环信聊天开发总结以及遇到的坑
- mySQL之delete from 与truncate
- java 程序题 递归算法 判断一个整数化成二进制之后有多少个1 (两种思路)
- RecyclerView使用,item实现全选,反选,单选,计算checkbox选中的个数
- MySQL 5.7重置root密码
- Hibernate: 三种状态和CRUD四种操作
- 【Java】ArrayList源码剖析
- 材质库总结