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 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
PHP异步调用socket实现代码
Jan 12 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
php实现Mysql简易操作类
Oct 11 PHP
php字符串的替换,分割和连接方法
May 23 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
解决php扩展安装不生效问题
Oct 25 PHP
解决PhpStorm64不能启动的问题
Jun 20 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
joomla数据库操作示例代码
2016/01/06 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python计算文本文件行数的方法
2015/07/06 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python 读取二进制 显示图片案例
2020/04/24 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
《伯牙绝弦》教学反思
2014/03/02 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
校庆活动策划方案
2014/06/05 职场文书
2015年手术室工作总结
2015/05/11 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
转正申请报告格式
2015/05/15 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
python图片灰度化处理的几种方法
2021/06/23 Python
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android