Я пытаюсь проанализировать файлы CSV, загруженные пользователем через PHP, но он не работает правильно.
Я загрузил, несколько правильно отформатировали CSVs, и он хорошо работал, однако; у меня есть многие пользователи, пытающиеся импортировать файлы CSV, экспортируемые из Excel, и у них есть проблемы. Я сравнил файлы с шахтой и заметил, что файлы Excel все отсутствие заключают в кавычки вокруг записей. Кроме этого, они идентичны. Если я открываю его и сохраняю его с, Открывают Office, не внося изменений вообще это работает. Таким образом, я вполне уверен, что это связано с кавычками.
Мой вопрос; как я читаю, они неправильно отформатировали CSVs?
ОБНОВЛЕНИЕ: Причина была найдена!
Это характерно для версии 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-го параметра?
(Конечно, это может нарушить то, что сейчас работает - а это значит, что вам придется иметь дело два отдельных случая: файлы с полями, заключенными в двойные кавычки, и файлы, которые не могут быть прочитаны в первом случае)