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 相关文章推荐
IStream与TStream之间的相互转换
Aug 01 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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
解析PHP无限级分类方法及代码
2013/06/21 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
公司市场部岗位职责
2013/12/02 职场文书
如何撰写岗位职责
2014/02/01 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android