Как я могу использовать другое окончание строки для чтения в PHP?
-
06-07-2019 - |
Вопрос
Я пытаюсь прочитать файл CSV, сгенерированный M $ Excel на Linux. Р>
В файле есть многострочные (разделенные x0A) столбцы и конец строки 0x0d0a.
PHP в Linux использует 0x0a в качестве ограничителя строки, поэтому все линейные инструменты (file, fgets, fgetcsv) считают, что в середине ячеек данных есть разрывы записей.
Если не обрабатывать файл побайтно, могу ли я временно изменить символ конца строки в PHP (константа PHP_EOL), чтобы я мог легко разобрать файл.
Я думаю, что это можно сделать в perl с " $ \ " ;. Есть ли что-то похожее в PHP?
Я понимаю, что могу разбирать побайтово, но я ищу более чистый подход.
Решение
Если предложение conceptDawg о auto_detect_line_endings
не работает, я бы рекомендовал прочитать весь файл через file_get_contents () с последующим вызовом explode () разбить файл на несколько строк. Вы можете передать любой символ, который вы хотите, explode ()
Другие советы
Вы можете попробовать использовать параметр конфигурации во время выполнения ' auto_detect_line_endings
". Это говорит о том, что с помощью этого автоматически будут определены правильные окончания строк. Из документов:
Когда этот параметр включен, PHP будет проверять данные, считанные с помощью fgets () и file (), чтобы определить, используют ли они соглашения об окончании строк в Unix, MS-Dos или Macintosh.
Это позволяет PHP взаимодействовать с системами Macintosh, но по умолчанию отключено, поскольку при обнаружении соглашений EOL для первой строки существует очень небольшое снижение производительности, а также потому, что люди, использующие возврат каретки в качестве разделителей элементов в системах Unix, будут испытать не обратно совместимое поведение.
Если это не сработает, вы всегда можете прочитать весь файл в память (в зависимости от размера файла это может оказаться невозможным) и выполнить preg_replace для соответствующих символов, заменив их на " правильные " символы.