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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 PHP
php解决安全问题的方法实例
Sep 19 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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无限分类的类
2007/01/02 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python同步windows和linux文件
2019/08/29 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python Selenium参数配置方法解析
2020/01/19 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
多媒体专业自我鉴定
2014/02/28 职场文书
环境工程专业自荐信
2014/03/03 职场文书
春节请假条
2014/04/11 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
离婚协议书样本
2015/01/26 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS