fgetcsv没有阅读附件

时间:2015-08-06 15:39:13

标签: php csv fgetcsv php-5.5

我正在尝试使用fgetcsv读取CSV行。然而,似乎并不关心外壳。

以下是该行的内容:

Super Administrator,"ROLE_SUPER_ADMIN, ROLE_GROUP_GUEST, ROLE_GROUP_WRITER, ROLE_USER_WRITER, ROLE_USER_GUEST"

这是CSV标准的有效行,它应返回以下内容,"作为附件,,作为分隔符:

$l = fgetcsv($handle, 0, ',', '"');
array(
    [0] => 'Super Administrator',
    [1] => 'ROLE_SUPER_ADMIN, ROLE_GROUP_GUEST, ROLE_GROUP_WRITER, ROLE_USER_WRITER, ROLE_USER_GUEST',
);

然而,这就是我得到的:

$l = fgetcsv($handle, 0, ',', '"');
array(
    [0] => 'Super Administrator',
    [1] => '"ROLE_SUPER_ADMIN',
    [2] => ' ROLE_GROUP_GUEST',
    [3] => ' ROLE_GROUP_WRITER',
    [4] => ' ROLE_USER_WRITER',
    [5] => ' ROLE_USER_GUEST"',
);

所以是的,似乎fgetcsv完全忽略了圈地角色。我尝试使用fgets然后使用str_getcsv使其工作但结果相同 - str_getcsv最有可能由fgetcsv调用以进行CSV转换。

我认为它可能是某种回归错误,它在我使用的PHP版本中找到了它的方式,所以我在这里粘贴php -v命令的结果:

me@linux:~/$ php -v
PHP 5.5.27-1+deb.sury.org~trusty+1 (cli) (built: Jul 15 2015 12:14:44) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

我相信这是我写这篇文章的最新版PHP5。虽然我怀疑这是某种PHP错误,但它也可能是一些安装/配置问题,因此我发布这个问题的原因。

有没有人经历过这个? 解决这个问题的最佳方法是什么?

修改
正如Mark Ba​​ker所指出的,PHP5.5.27-1实际上是PHP5.5的最新版本。

编辑2:
以下是bin2hex功能的尝试,显示为var_dump

行读",",","(每个单元格中仅包含昏迷的2个单元格):0022002c0022002c0022002c0022000a

使用bin2hex('"'),结果只是22

str_getcsv仍然给了我这个错误。

1 个答案:

答案 0 :(得分:1)

好的,解决了。

这是每个人都怀疑的:文件的编码搞砸了。我不知道这是哪种编码,但只要我试图打开CSV,LibreOffice就会提出Unicode。

我必须用nano打开它们才能意识到确实存在编码问题。我在计算机上使用的Gedit,vim或任何其他工具都没有出错。使用nano打开时,在每个其他字符之间插入@符号,并且无法正确读取换行符。

fgetcsv似乎有一些编码没有得到很好的支持。为了解决这个问题,我从nano重新创建了文件(从另一个没有显示@的工具复制粘贴。)