没有引号的CSV不能与fgetcsv一起使用

时间:2010-02-23 19:30:30

标签: php csv fgetcsv

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

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

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

更新:已找到原因!

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

ini_set('auto_detect_line_endings',TRUE);

2 个答案:

答案 0 :(得分:22)

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

ini_set('auto_detect_line_endings',TRUE);

答案 1 :(得分:1)

查看manual page of fgetcsv,其原型如下:

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

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

如果您尝试指定不需要任何机箱,为第4个参数指定空字符串会怎样?

(当然,这可能会破坏现在正在运行的东西 - 这意味着你必须处理两个独立的案例:包含双引号的字段的文件,以及无法通过双引号读取的文件第一种情况)