Php fgetcsv不读取存储模块

Php fgetcsv不读取存储模块,php,csv,fgetcsv,php-5.5,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

我正在尝试使用
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 Baker所指出的,PHP5.5.27-1实际上是目前PHP5.5的最新版本

编辑2:
下面是使用
bin2hex
函数的一次尝试,该函数显示为
var\u dump

行读为“
”,“,”,“
(每个单元格中只有一个昏迷的两个单元格):
002002C002C002C002C002C002C00200A

使用
bin2hex(“”)
结果就是
22

str\u getcsv
仍然给我这个错误。

好的,解决了

这是每个人都在怀疑的:文件的编码被弄乱了。我不知道这是哪种编码,但每当我试图打开CSV时,LibreOffice建议我使用Unicode

我不得不用nano打开它们,才意识到确实存在编码问题。Gedit、vim或我电脑上的任何其他工具都没有出现错误。使用nano打开时,每隔一个字符之间插入一个
@
符号,换行符无法正确读取


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

5.6.11是PHP的最新版本,而不是5.5.27。。。。这只是5.5版本中的最新版本,但是str_getcsv()函数——它在内部使用相同的解析代码——在5.3.0之前的所有PHP版本中都能正常工作(当str_getcsv()被引入时)。。。。您是否绝对确定文件中的附件是
(ASCII 0x22)字符,而不是
或类似字符感谢PHP修订版的精确性。关于您的第二条评论,我是肯定的。实际上我使用的是LibreOffice(Ubuntu上的excel翻版)是软件而不是我添加了
。即使如此,当我在文本编辑器中打开文件时,也会显示
字符,而不会显示其他任何内容。请尝试在字符串上使用
bin2hex()
,或使用十六进制编辑器确保这两个
实际上都是ASCII 0x22。在这里工作完全正常(从PHP 5.1.0开始),当我将给定字符串写入临时文件时:我知道这是一个较旧的问题/答案。以防有人偶然发现
fgetcsv
str_getcsv
将使用PHP使用的内部编码。一个技巧是使用类似
str_getcsv(mb_convert_编码(file_get_contents($file),mb_internal_encoding(),'UTF16'))的东西
读取文件,这将解决问题,而不需要复制和粘贴周围的内容。