php数组编码转换示例详解


Posted in PHP onMarch 11, 2014

因为一些特殊字符的显示效果的原因不得不把习惯的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维数组还是关联数组,一切都已经自动完成,保证数组转换前后数据一致。从代码的长短以及循环和原生方法的比较上,相信大家已经有了选择。

PHP 相关文章推荐
php str_pad 函数用法简介
Jul 11 PHP
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
php实现转换html格式为文本格式的方法
May 16 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 #PHP
PHP输出缓存ob系列函数详解
Mar 11 #PHP
php初始化对象和析构函数的简单实例
Mar 11 #PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 #PHP
php调用c接口无错版介绍
Mar 11 #PHP
PHP goto语句简介和使用实例
Mar 11 #PHP
php调用C代码的实现方法
Mar 11 #PHP
You might like
附件名前加网站名
2008/03/23 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
游戏商店:Eneba
2020/04/25 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
自我鉴定 电子商务专业
2014/01/30 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
党的作风建设心得体会
2014/10/22 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
骨干教师考核评语
2014/12/31 职场文书
2015年保管员工作总结
2015/04/30 职场文书
外出听课学习心得体会
2016/01/15 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android