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修改NetBeans默认字体的大小
Jul 02 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
php把数组值转换成键的方法
Jul 13 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP函数积累总结
Mar 19 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php操作redis缓存方法分享
2015/06/03 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
浅谈微信小程序flex布局基础
2018/09/10 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
python 读取鼠标点击坐标的实例
2018/12/29 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
美国现代家具购物网站:LexMod
2019/01/09 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
实现向右循环移位
2014/07/31 面试题
网络技术支持面试题
2013/04/22 面试题
秋季运动会通讯稿
2014/01/24 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
中药专业自荐信范文
2014/03/18 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
酒店开业主持词
2015/07/02 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js