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函数
Oct 09 PHP
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
php的memcached客户端memcached
Jun 14 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
Yii清理缓存的方法
Jan 06 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
Laravel validate error处理,ajax,json示例
Oct 25 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 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二分法在IP地址查询中的应用
2008/08/12 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
php错误日志简单配置方法
2016/07/11 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
简述JS控制台的使用
2018/07/15 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
Python中正则表达式的用法实例汇总
2014/08/18 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
新加坡交友网站:be2新加坡
2019/04/10 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
2016年社区文体活动总结
2016/04/06 职场文书
python基础之while循环语句的使用
2021/04/20 Python
微信小程序实现录音Record功能
2021/05/09 Javascript
python 经纬度求两点距离、三点面积操作
2021/06/03 Python