12

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

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

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

更新:原因已经找到!

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

ini_set('auto_detect_line_endings',TRUE);
4

2 回答 2

22

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

ini_set('auto_detect_line_endings',TRUE);
于 2010-03-09T20:43:36.377 回答
1

查看手册页fgetcsv,其原型如下所示:

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

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

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

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

于 2010-02-23T19:34:49.110 回答