2013-08-16 503 views
1

尝试导入CSV文件时,运行fgetcsv时阿拉伯字符消失,但是当我从fopen打印输出时,阿拉伯字符显示得很好。奇怪的是,这只发生在我们的生产环境中,而不是在我的开发环境中,fgetcsv只读阿拉伯字符。有没有在生产中设置正确的服务器设置?fgetcsv()不读取阿拉伯字符

+1

什么是csv文件的编码? – user4035

+0

无法重现:我在utf8中用阿拉伯语创建了一个测试文件。 fgetcsv正常工作。 – user4035

+0

你可以发布文件吗? – pguardiario

回答

2

fgetcsv()对基于系统区域设置的文件编码做出了假设。正如PHP手册所述:

此功能考虑到语言环境设置。如果LANG是例如 en_US.UTF-8,单字节编码的文件被这个 函数读错了。

你可能想在你的两台机器比较区域设置和永久地改变它的其中一个,或者您fgetcsv()之前使用类似setlocale(LC_ALL, 'ar_AE.utf8')(第二个参数显然取决于你的文件的编码)。

+0

它不适用,因为阿拉伯语永远不会是单字节编码。 – pguardiario

+0

@pguardiario我知道,但系统区域设置也可能是基于UTF-16的。 – lafor

+0

谢谢!显然,生产服务器上的语言环境设置不正确。在'fgetcsv'之前使用'setlocale(LC_ALL,'en_US.UTF-8')'做了窍门。 – Cole