php关于fgetcsv中文乱码问题

今天在处理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函数将其还原为数组。这次结果正确显示了。

$data = eval('return '.iconv('gbk','utf-8',var_export($data,true)).';');

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

posted @ 2012-12-26 15:36  卡卡之海  阅读(669)  评论(0编辑  收藏  举报