php数组编码转换示例详解

2015-01-24信息快讯网

需要达到的效果是GBK数组转换成utf-8数组传给json_encode函数,下面使用详细介绍转换方法

因为一些特殊字符的显示效果的原因不得不把习惯的utf-8工程改成了GBK,由于使用了ajax技术,又涉及到了老问题――编码转换。一些表单验证需要返回json数据,php的json_encode函数只支持utf-8编码,无奈只得iconv了,需要达到的效果是GBK数组转换成utf-8数组传给json_encode函数。

最开始的思路,将数组序列化后用iconv函数转换编码,之后再反序列化,代码如下:

unserialize(iconv('gbk','utf-8',serialize($array)));  

得到的结果是空白,后来想起来配置文件里设置了默认编码 ini_set('default_charset', 'gbk');   这样用gbk反序列化utf-8的字符串肯定不好用了,此处在序列化和反序列化之间加个ini_set('default_charset', 'utf-8'); 应该也是可以的,但这么弄总觉得有点别扭,因为是全局的编码设置,很容易导致其他地方的编码问题,比如数据库操作。那么换个思路,用构建数组原型的序列化方法,借助var_export函数,最终函数如下:

function array_iconv($in_charset,$out_charset,$arr){  
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  
} 

原理很简单 var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回(类似匿名函数?),至此完美解决问题。

后续:后来在网上搜了下资料,看有没有更好的方法,找到的都大同小异,都是利用递归调用iconv的方式,如果数组元素过多或者维数多一些,性能上肯定不怎么样了,更好的是原生代码的方式,不需要考虑是N维数组还是关联数组,一切都已经自动完成,保证数组转换前后数据一致。从代码的长短以及循环和原生方法的比较上,相信大家已经有了选择。

访问编码后的中文URL返回404错误的解决方法
PHP基于数组实现的分页函数实例
PHP中IP地址与整型数字互相转换详解
PHP将回调函数作用到给定数组单元的方法
php中使用array_filter()函数过滤空数组的实现代码
php中多维数组按指定value排序的实现代码
php数组索引的Key加引号和不加引号的区别
PHP解码unicode编码的中文字符代码分享
两种设置php载入页面时编码的方法
PHP实现把文本中的URL转换为链接的auolink()函数分享
将CMYK颜色值和RGB颜色相互转换的PHP代码
完美的2个php检测字符串是否是utf-8编码函数分享
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题
PHP实现的汉字拼音转换和公历农历转换类及使用示例
php使用反射插入对象示例分享
使用Discuz关键词服务器实现PHP中文分词
php实现文件编码批量转换
关于js和php对url编码的处理方法
设置php页面编码的两种方法示例介绍
php多维数组去掉重复值示例分享
php数组去重复数据示例
php对数组排序代码分享
php根据操作系统转换文件名大小写的方法
将php数组输出html表格的方法
php删除数组元素示例分享
php全角字符转换为半角函数
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
php制作unicode解码工具(unicode编码转换器)代码分享
©2014-2024 dbsqp.com