【问题标题】:CSVs without quotes not working with fgetcsv不带引号的 CSV 不适用于 fgetcsv
【发布时间】:2011-01-20 05:37:14
【问题描述】:

我正在尝试解析用户通过 PHP 上传的 CSV 文件,但无法正常工作。

我已经上传了几个格式正确的 CSV,但是效果很好;我有很多用户尝试导入从 Excel 导出的 CSV 文件,但他们遇到了问题。我将这些文件与我的文件进行了比较,并注意到 Excel 文件在条目周围都没有引号。除此之外,它们是相同的。如果我打开它并使用 Open Office 保存它,而不做任何更改,它就可以工作。所以我相当肯定它与引号有关。

我的问题是;如何阅读这些格式不正确的 CSV?

更新:找到原因了!

这是特定于 Mac 版本的 Excel。由于某些任意原因,Mac 上的换行符处理方式不同,因此在使用 fgetcsv 之前,您应该这样做;

ini_set('auto_detect_line_endings',TRUE);

【问题讨论】:

  • 你能告诉我们你的代码并告诉我们问题是什么吗?无论格式如何,我们都可以毫无问题地使用 fgetcsv()。
  • 谢谢这个家伙!!救生员

标签: php csv fgetcsv


【解决方案1】:

这是特定于 Mac 版本的 Excel。由于某些任意原因,Mac 上的换行符处理方式不同,因此在使用 fgetcsv 之前,您应该这样做;

ini_set('auto_detect_line_endings',TRUE);

【讨论】:

  • 疯了。惊人的。找到。
【解决方案2】:

manual page of fgetcsv,它的原型是这样的:

array fgetcsv  ( resource $handle  [, int $length  
    [, string $delimiter = ','  [, string $enclosure = '"' 
    [, string $escape = '\\'  ]]]] )

$enclosure的默认值(即第4个参数)是双引号。

如果您尝试指定不想要任何外壳,为第 4 个参数指定一个空字符串怎么办?

(当然,这可能会破坏现在的工作方式——这意味着您必须处理两种不同的情况:字段用双引号括起来的文件,以及无法被第一种情况)

【讨论】:

  • 是的,我看到了。但是,正如你所说,它打破了目前的工作方式。有没有简单的方法可以检查它存储的格式并适当地切换行为?
  • 我想一些正则表达式可以让你确定文件的格式;;另一种解决方案是始终尝试第一个(最常见的情况)解决方案,如果它不起作用,请尝试第二个;;考虑到您文件的所有行的格式可能都相同,只对第一行进行测试就足够了——这意味着您只需对fgetcsv 进行一次“无用”调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多