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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
第四章 php数学运算
Dec 30 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
php程序内部post数据的方法
Mar 31 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 PHP
PHP开发API接口签名生成及验证操作示例
May 27 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 作用域解析运算符(::)
2010/07/27 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
document.forms[].submit()使用介绍
2014/02/19 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
JavaScript中数组去重的5种方法
2020/07/04 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python制作词云的方法
2018/01/03 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
python调用摄像头拍摄数据集
2019/06/01 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
简历的自我评价范文
2014/02/04 职场文书
经理任命书模板
2014/06/06 职场文书
校园开放日新闻稿
2015/07/17 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书