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 防注入函数(格式化数据)
Aug 08 PHP
php使用curl访问https示例分享
Jan 17 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
两款万能的php分页类
Nov 12 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
简单实现PHP留言板功能
Dec 21 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
深入了解PHP类Class的概念
2012/06/14 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
js中数组Array的一些常用方法总结
2013/08/12 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
简单实现js进度条加载效果
2020/03/25 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
python 遍历pd.Series的index和value
2019/11/26 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
求职毕业生自荐书
2014/02/08 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis
Java基础——Map集合
2022/04/01 Java/Android
Python实现科学占卜 让视频自动打码
2022/04/09 Python