吴伟贤のBlog

Feed Rss

linux fgetcsv 乱码

03.08.2010, php, by .

上传数据使用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)!

评论已关闭。