CSV без кавычек не работает с fgetcsv - PullRequest
12 голосов
/ 23 февраля 2010

Я пытаюсь проанализировать файлы CSV, загруженные пользователем через PHP, но это не работает должным образом.

Я загрузил несколько правильно отформатированных CSV-файлов, и все это работало нормально; У меня есть много пользователей, пытающихся импортировать файлы CSV, экспортированные из Excel, и у них возникают проблемы. Я сравнил файлы с моими и заметил, что во всех файлах Excel отсутствуют кавычки вокруг записей. Кроме того, они идентичны. Если я открою его и сохраню в Open Office, то без внесения каких-либо изменений это сработает. Так что я уверен, что это связано с кавычками.

Мой вопрос; как мне прочитать эти неправильно отформатированные файлы CSV?

ОБНОВЛЕНИЕ: Причина найдена!

Это относится к версии Excel для Mac. Разрывы строк обрабатываются по-разному на Mac по какой-то произвольной причине, поэтому перед использованием fgetcsv вы должны сделать это;

ini_set('auto_detect_line_endings',TRUE);

Ответы [ 2 ]

22 голосов
/ 09 марта 2010

Это относится к версии Excel для Mac. Разрывы строк обрабатываются по-разному на Mac по какой-то произвольной причине, поэтому перед использованием fgetcsv вы должны сделать это;

ini_set('auto_detect_line_endings',TRUE);
1 голос
/ 23 февраля 2010

Глядя на справочную страницу в fgetcsv, ее прототип выглядит так:

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

Значение по умолчанию для $enclosure (т.е. 4-й параметр) - двойная кавычка.

Что, если вы попытаетесь указать, что вам не нужно вложение, указав пустую строку для этого 4-го параметра?

(Конечно, это может нарушить то, что сейчас работает - это означает, что вам придется иметь дело с двумя отдельными случаями: файлы с полями, заключенными в двойные кавычки, и файлы, которые не могут быть прочитаны первый случай)

...