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程序的方法
Mar 09 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
PHP7.0版本备注
Jul 23 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 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原生模板引擎 最简单的模板引擎
2012/04/25 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
Laravel find in set排序实例
2019/10/09 PHP
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
Augularjs-起步详解
2016/07/08 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python爬取网页信息的示例
2020/09/24 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
广告设计专业自荐信范文
2013/11/14 职场文书
《自选商场》教学反思
2014/02/14 职场文书
信访工作经验交流材料
2014/05/23 职场文书
专题组织生活会方案
2014/06/15 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
加强作风建设工作总结
2014/10/23 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
小学语文国培研修日志
2015/11/13 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android