PHP中使用mb_convert_encoding转码的小陷阱
来源:互联网 发布:发改委大数据主任 编辑:程序博客网 时间:2024/06/05 09:18
在php程序中使用mb_convert_encoding()方法进行字符编码转换大家都很熟悉了,平时也在大量的使用。而且在一般情况下该方法也表现的足够好,值得表扬。但在一个项目中我们需要使用它进行UTF8到GBK的转换,在转换一些特殊字符时发现了一个不大不小的问题。具体表现为mb把在utf8可编码的字符而在gbk中不可编码的字符都转成了/0x00/0x80,这样就导致转换后的gbk字符是有问题的。
在我们的意识中,在进行字符编码转换的过程中,如果遇到目标编码不可表现的字符,转码程序应该做的是舍弃这种字符,这样虽然丢失了部分数据,但不会导致转码的字符序列不可用。不清楚mb为什么要使用上述方式而不是舍弃方式。
临时的解决方式是对转码后的字符串序列进行过滤,过滤掉所有/x00/80的字符;又或者在转义之前对utf8的字符串进行过滤,过滤掉ut8可表示而gbk不可表示的所有字符,从实现难度上来讲,第一种过滤方式比较容易做到。
在我们的意识中,在进行字符编码转换的过程中,如果遇到目标编码不可表现的字符,转码程序应该做的是舍弃这种字符,这样虽然丢失了部分数据,但不会导致转码的字符序列不可用。不清楚mb为什么要使用上述方式而不是舍弃方式。
临时的解决方式是对转码后的字符串序列进行过滤,过滤掉所有/x00/80的字符;又或者在转义之前对utf8的字符串进行过滤,过滤掉ut8可表示而gbk不可表示的所有字符,从实现难度上来讲,第一种过滤方式比较容易做到。
- PHP中使用mb_convert_encoding转码的小陷阱
- php mb_convert_encoding的使用 乐杨俊
- php转码中的iconv与mb_convert_encoding的理解
- PHP 中字符编码转换 iconv() 和 mb_convert_encoding() 的区别
- PHP的内码转换函数 mb_convert_encoding()
- PHP的内码转换函数 mb_convert_encoding()
- php中iconv和mb_convert_encoding…
- PHP一些常用函数的学习mb_convert_encoding
- gcc中使用scanf的一个小陷阱
- [转]php编码转换函数mb_convert_encoding
- PHP mysql_real_escape_string的使用陷阱
- php-弱类型的小陷阱
- 一个PHP语言的小陷阱
- mb_convert_encoding 函数的使用 转换字符编码
- php内部字符串编码转换函数mb_convert_encoding使用方
- PHP字符串编码转码iconv与mb_convert_encoding用法和区别
- php mb_convert_encoding 字符串编码
- PHP mb_convert_encoding 问题记录
- 一点杂谈(转自博客园)
- 关于apache2不能启动的问题的解决方法
- javascript调试小结
- 2007-5-26
- mysql学习体会
- PHP中使用mb_convert_encoding转码的小陷阱
- 最新版CodeSmith3.2(.net2.0)教程目录
- 最新版CodeSmith3.2(.net2.0)教程之一:CodeSmith介绍及指南
- 我的生活,我的梦,我的事业,我的爱情。
- 最新版CodeSmith3.2(.net2.0)教程之二:第一次用CodeSmith生成代码
- 最新版CodeSmith3.2(.net2.0)教程之三:了解你要创建一个什么模板
- CRM
- 最新版CodeSmith3.2(.net2.0)教程之四:生成属于你的第一个模板
- 最新版CodeSmith3.2(.net2.0)教程之五:SQL2005数据模板(上)