> 백엔드 개발 > PHP 튜토리얼 > PHP 배열 인코딩 변환 방법 참조

PHP 배열 인코딩 변환 방법 참조

WBOY
풀어 주다: 2016-07-25 08:58:02
원래의
1207명이 탐색했습니다.
本文介绍下,在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数组中编码转换的这个问题,就介绍到这里了,希望对大家有所帮助。



원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿