> php教程 > php手册 > 본문

php 数组编码转换方法 关于fgetcsv中文乱码问题

WBOY
풀어 주다: 2016-06-06 09:53:20
원래의
1618명이 탐색했습니다.

在处理csv文件导入时关于fgetcsv获取中文乱码问题.. 因为项目采用utf-8编码, 而导入的csv文件是以ansi编码保存的  输出中文乱码问题.

下面为找到的解决方法原文. 

引用:  http://www.pignut.net/352

 

今天在处理csv文件导入的时候,通过fgetcsv方法返回的数组中,值为汉字的部分全是乱码。我分析是因为项目的文件全部以utf-8编码,而
导入的csv文件是以ansi编码保存的,对于中文操作系统环境对应的应该就是gbk编码了,通过手动更改浏览器字符编码为gbk,乱码的情况消失了。于
是决定对数组进行编码转换。

系统默认的编码转换函数iconv只能接受字符串参数,当然我们可以通过array_walk……等数组方法利用回调函数递归的来进行处理,也可以
直接读取数组单元处理后再填入数组。但是感觉数组如果很庞大或者维数过多,性能上的比较就不得不考虑了。正因为iconv函数只能接受字符串参数,于是想
到将数组先利用函数serialize序列化,通过iconv转换编码后再用unserialize反序列化回来。但不知道为什么转换编码后无法反序列化
回来,找个时间单独实验一下,清楚的朋友给我留个言也好。

于是求助其他Variable handling
函数。在这里var_export函数可以输出或返回一个变量的字符串表示。此函数返回关于传递给该函数的变量的结构信息,它和 var_dump()
类似,不同的是其返回的表示是合法的 PHP 代码。可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。下面就利用这一特性将数组转化为字符串然后再iconv接着再用eval函数将其还原为数组。这次结果正确显示了。

<span style="color: rgb(102, 102, 153);">$data</span> = <span style="color: rgb(51, 102, 255);">eval</span>('return '.<span style="color: rgb(51, 102, 255);">iconv</span>('gbk','utf-8',<span style="color: rgb(51, 102, 255);">var_export</span>($data,true)).';');
로그인 후 복사

$data为需要转换编码的数组。

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