Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fgetcsv未正确拆分逗号';从csv文件中读取时发生错误_Php_Fgetcsv - Fatal编程技术网

Php fgetcsv未正确拆分逗号';从csv文件中读取时发生错误

Php fgetcsv未正确拆分逗号';从csv文件中读取时发生错误,php,fgetcsv,Php,Fgetcsv,我正在尝试解析CSV数据,但在CSV以逗号分隔时遇到了困难 函数fgetcsv()也在拆分十进制数上的逗号,即使字段是封闭的。 当手动从所述csv文件复制一行并将其用作变量以使用str_getcsv()解析该行时,它工作正常 我对其他分隔符(如制表符或分号)没有问题,只使用逗号 例如: $csv_string = '"OUT30045","stuk","16,70","1","1","5,00","0,0400","16,03","10,00","0,0750","15,45"'; print

我正在尝试解析CSV数据,但在CSV以逗号分隔时遇到了困难

函数
fgetcsv()
也在拆分十进制数上的逗号,即使字段是封闭的。
当手动从所述csv文件复制一行并将其用作变量以使用
str_getcsv()
解析该行时,它工作正常

我对其他分隔符(如制表符或分号)没有问题,只使用逗号

例如:

$csv_string = '"OUT30045","stuk","16,70","1","1","5,00","0,0400","16,03","10,00","0,0750","15,45"';

print_r(str_getcsv($csv_string));
输出:

Array
(
[0] => OUT30045
[1] => stuk
[2] => 16,70
[3] => 1
[4] => 1
[5] => 5,00
[6] => 0,0400
[7] => 16,03
[8] => 10,00
[9] => 0,0750
[10] => 15,45
)
Array(
[0] => "OUT30045"
[1] => "stuk"
[2] => "16
[3] => 70"
[4] => "1"
[5] => "1"
[6] => "5
[7] => 00"
[8] => "0
[9] => 0400"
[10] => "16
[11] => 03"
[12] => "10
[13] => 00"
[14] => "0
[15] => 0750"
[16] => "15
[17] => 45"
)
这就是我想要的,也是我应该做的

但是,当我试图直接从CSV文件中读取上述信息时,它也会分割十进制值:

$csv_file = "PriceList_ART_comma.csv";
$file = new SplFileObject($csv_file, "r");

$fields = $file->fgetcsv();
print_r($fields);
输出:

Array
(
[0] => OUT30045
[1] => stuk
[2] => 16,70
[3] => 1
[4] => 1
[5] => 5,00
[6] => 0,0400
[7] => 16,03
[8] => 10,00
[9] => 0,0750
[10] => 15,45
)
Array(
[0] => "OUT30045"
[1] => "stuk"
[2] => "16
[3] => 70"
[4] => "1"
[5] => "1"
[6] => "5
[7] => 00"
[8] => "0
[9] => 0400"
[10] => "16
[11] => 03"
[12] => "10
[13] => 00"
[14] => "0
[15] => 0750"
[16] => "15
[17] => 45"
)
因为我无法控制用户是否上传逗号、制表符或分号分隔的文件,所以我必须让它对逗号分隔的文件起作用

任何帮助都将不胜感激

CSV文件的示例:

"ItemCode","Unit","Price","UnitFactor","EntryMethod","Aantal1","Korting1","Nieuwe prijs1","Aantal2","Korting2","Nieuwe prijs2"
"IND300654","stuk","37,99","1","1",,,,,,
"IND300655","stuk","23,95","1","1",,,,,,
"IND300656","stuk","23,95","1","1",,,,,,
"IND300657","stuk","24,25","1","1",,,,,,
"OUT30045","stuk","16,70","1","1","5,00","0,0400","16,03","10,00","0,0750","15,45"
"OUT30055","stuk","39,20","1","1","5,00","0,0400","37,63",,,
"OUT30073","stuk","45,00","1","1","5,00","0,0400","43,20",,,
"OUT30074","stuk","45,00","1","1","5,00","0,0400","43,20",,,
编辑:

我认为这可能与文件本身有关。 我复制了CSV文件的内容,粘贴到记事本中,并将其保存为.CSV文件。 当我使用这个新文件时,一切正常。。。 不知何故,原始CSV文件无法正确读取,可能是因为某种编码

编辑已解决的问题:

找到了我问题的原因。原始CSV文件在每个字符后都包含一些空字符(chr(0))。
因此,解析例如“ItemCode”结果类似于“0I0t0e0m0c0o0d0e”。在每行上执行str_替换(chr(0),“”,$string)后,str_getcsv()工作正常。

请发布csv文件的一个小样本添加了csv样本。使用您的样本代码工作正常,唯一的问题是文件中的双引号不是正确的双引号,char(34)。此外,双引号是默认的存储模块,因此默认情况下它应该可以工作。我将检查这些双引号。谢谢!您使用的编码是utf-16或ucs2或类似的编码-Windows将其用作其wchar。请发布csv文件的小样本添加csv样本使用您的样本,仅限问题是,文件中的双引号不是正确的双引号,char(34)。此外,双引号是默认的附件,因此默认情况下应该可以工作。我将检查这些双引号。谢谢!您使用的编码是utf-16或ucs2或类似的编码-Windows将其用作其wchar。