Ответ 1
Это относится к Mac версии Excel. Разрывы строк обрабатываются по-разному на компьютерах Mac по какой-либо причине, поэтому перед использованием fgetcsv вы должны сделать это:
ini_set('auto_detect_line_endings',TRUE);
Я пытаюсь разобрать CSV файлы, загруженные пользователем через PHP, но он не работает должным образом.
Я загрузил несколько правильно отформатированных CSV, но он работал нормально; У меня есть много пользователей, пытающихся импортировать CSV файлы, экспортированные из Excel, и у них возникают проблемы. Я сравнил файлы с моими и заметил, что файлы Excel не имеют котировок вокруг записей. Кроме того, они идентичны. Если я открою его и сохраню с помощью Open Office, без каких-либо изменений, это сработает. Поэтому я уверен, что это связано с кавычками.
Мой вопрос: как я могу прочитать эти неправильно отформатированные CSV?
UPDATE: Причина найдена!
Это относится к Mac версии Excel. Разрывы строк обрабатываются по-разному на компьютерах Mac по какой-либо причине, поэтому перед использованием fgetcsv вы должны сделать это:
ini_set('auto_detect_line_endings',TRUE);
Это относится к Mac версии Excel. Разрывы строк обрабатываются по-разному на компьютерах Mac по какой-либо причине, поэтому перед использованием fgetcsv вы должны сделать это:
ini_set('auto_detect_line_endings',TRUE);
Глядя на справочную страницу fgetcsv
, ее прототип выглядит следующим образом:
array fgetcsv ( resource $handle [, int $length
[, string $delimiter = ',' [, string $enclosure = '"'
[, string $escape = '\\' ]]]] )
Значение по умолчанию для $enclosure
(т.е. 4-й параметр) представляет собой двойную кавычку.
Что делать, если вы попытаетесь указать, что вам не нужен какой-либо корпус, указав пустую строку для этого 4-го параметра?
(Конечно, это может сломать то, что сейчас работает - это означает, что вам придется иметь дело с двумя отдельными случаями: файлы с полями, заключенными в двойные кавычки, и файлы, которые невозможно было прочитать по первому случаю)