PHP:寻求引号内str_getcsv换行错误的方法

  • 本文关键字:getcsv 换行 错误 方法 str PHP php
  • 更新时间 :
  • 英文 :


我有一个这样的 CSV:

Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00
1996,Jeep,Grand Cherokee,"MUST SELL! ""TODAY""
air, moon roof, loaded",4799.00

如何将其转换为二维数组,而不会将最后一行错放到自己的数组中?


以下是问题的插图(也托管在这里 https://3v4l.org/HAJh1(:

$s2=<<<EOD
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00
1996,Jeep,Grand Cherokee,"MUST SELL! ""TODAY""
air, moon roof, loaded",4799.00
EOD;
$lines=str_getcsv($s2,"n");
print_r($lines);

有问题的错误(尽管PHP开发人员在撰写本文时尚未将其识别为一个(:https://bugs.php.net/bug.php?id=55763

那里有"解决方案",但没有一个似乎可以解决这个例子。

str_getcsv()希望字符串是一个 CSV 记录,而不是整个 CSV 文件。

如果内存中有 CSV 文件,则可以使用 php://memory 将其转换为可以使用 fgetcsv() 读取的流。这将正确解析记录。

<?php
$s2=<<<EOD
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00
1996,Jeep,Grand Cherokee,"MUST SELL! ""TODAY""
air, moon roof, loaded",4799.00
EOD;
$stream = fopen("php://memory", "r+");
fwrite($stream, $s2);
rewind($stream);
while ($row = fgetcsv($stream)) {
  print_r($row);
}

如果CSV实际上在文件中,只需打开该文件并使用fgetcsv()读取它,如上所述。

最新更新