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 13 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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
laravel 4安装及入门图文教程
2014/10/29 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
基于python实现名片管理系统
2018/11/30 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
饭店工作计划书
2014/01/10 职场文书
学生干部的自我评价分享
2014/01/18 职场文书
小学生考试获奖感言
2014/01/30 职场文书
个人委托书怎么写
2014/09/17 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书