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为需要转换编码的数组。

转载于:https://www.cnblogs.com/kakasea/archive/2012/12/26/2834178.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值