Heim >Backend-Entwicklung >PHP-Tutorial >php数组编码转换的方法参考

php数组编码转换的方法参考

WBOY
WBOYOriginal
2016-07-25 08:58:021186Durchsuche
本文介绍下,在php中对数组进行编码转换的一些方法,有需要的朋友参考下。

在php编程中,对数组的操作,有时会遇上编码转换的相关问题。

因为一些特殊字符的显示效果的原因,于是把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函数,最终函数如下:

<?php
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数组中编码转换的这个问题,就介绍到这里了,希望对大家有所帮助。



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn