【问题标题】:CSV with un-escaped quotes in data not parsing in PHP's fgetcsv在 PHP 的 fgetcsv 中未解析的数据中带有未转义引号的 CSV
【发布时间】:2015-06-08 15:59:34
【问题描述】:

如果我有 test.csv 例如:

"column1", "column2", "this "is" column3", "column4"\r\n

这使用 PHP fgetcsv 分成 5 列。有没有办法处理未转义的引号以返回 4 列?

if (($handle = fopen("test.csv", "r")) !== FALSE) {
 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
  print_r($data);
 }
}

【问题讨论】:

  • 你的 CSV 文件来自哪里?您应该有一对双引号来表示嵌入的双引号:"column2", "this ""is"" column3", "column4"。
  • 你可能会使用一个正则表达式(preg_replace)来测试一个引号是否在逗号之前或之后,如果没有找到,则“转义”它......不是一个完美的解决方案,你'd 需要使用 fgets(),检查和转义,然后是 str_getcsv() 而不是更简单的 fgetcsv()
  • 外部数据源大约有 200 万条记录,因此有些有限。
  • 嗯,PHP 中没有内置的灵丹妙药,可以让它自动处理无效的 CSV 文件,您要么在将其解析为 CSV 之前修复它,要么在让 PHP 访问文件之前修复它

标签: php csv


【解决方案1】:

此未转义的引用不应采用 CSV 格式。 所以你必须更正文件以具有正确的 CSV 格式,然后才能将其与“fgetcsv”一起使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2013-02-19
    • 2017-09-23
    • 1970-01-01
    • 2011-01-20
    • 2013-03-09
    • 2021-07-30
    相关资源
    最近更新 更多