上传数据使用fgetcsv 在windows下不会乱码,传到linux上,出现乱码了。
网上找了解决办法
在读取CSV时候加上
setlocale(LC_ALL,’zh_CN’);
如
setlocale(LC_ALL,’zh_CN’);
while($data=fgetcsv($handle,1000,","))
{ }
以下是网上找到的文章
mark一下
fgetcsv对区域设置敏感
CSV 逗号分隔符作为批量处理文件非常的方便适用。可以做为系统之间数据传递的通用文件格式。
在PHP中对csv格式文件处理的函数fgetcsv 能非常方便的处理csv格式的文件!
但是fgetcsv 对服务器区域设置是敏感的。
注意:
该函数对区域设置是敏感的。比如说 LANG 设为 en_US.UTF-8 的话,单字节编码的文件就会出现读取错误。
这是PHP 手册上的说明。
实际应用中,当你在Linux 系统的服务器上对gb2312的csv格式文件进行处理的时候,就会出现乱码现象,如果你的linux系统是默认设置的话。
解决方法是:
使用: setlocale 函数设置环境变量。比如要设置使用gb 的区域设置可以在fgetcsv前使用下面的语句。
setlocale(LC_ALL,array(‘zh_CN.gbk’,’zh_CN.gb2312′,’zh_CN.gb18030′));
具体使用哪些locale 可以使用linux 命令 locale -a 查看系统支持哪些。
这可以解决fgetcsv 函数对区域设置的敏感问题。
Windows 系统服务器不知道setlocale是否好使,(php手册上没有说明setlocale只适用于Linux)!