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的autoload自动加载机制使用说明
Dec 28 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
百度站点地图(百度sitemap)生成方法分享
Jan 09 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
ThinkPHP中使用ajax接收json数据的方法
Dec 18 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 PHP
CI框架简单分页类用法示例
Jun 06 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自定义urlencode,urldecode函数实例
2015/03/24 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
React组件的三种写法总结
2017/01/12 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
vue内置指令详解
2018/04/03 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
便利店的创业计划书
2014/01/15 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
灰雀教学反思
2014/04/28 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
实习单位推荐信
2015/03/27 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python