Intereting Posts
Определение корневого каталога документа как ROOT_PATH Подписанная строка php openssl не проверяется Win CryptoAPI PHP – Как избежать ошибок Parse на старых серверах при использовании новых функций PHPUnit лучшие практики для организации тестов Загрузка многостраничного изображения на PHP-сервер из приложения iOS Как использовать KNPPaginatorBundle для разбивки на страницы с использованием репозитория Doctrine? Лучший способ включить javascript в php? Symfony 2 – UploadedFile, метод переноса не удалось – невозможно создать каталог … Как отображать данные в индексе Yii2, например, в виде карты Запросы Google BigQuery медленны Запись CSV в файл без корпусов в PHP Как изменить текстовое поле на видимое в зависимости от того, какой элемент выбран в раскрывающемся меню? PHP socket_write () отправляет только часть данных Как определить, является ли строка допустимым UUID v4? Хорошие криптографические хэш-функции

Обработка CSV-файла в PHP, который способен обслуживать MS и UNIX Line Break

У меня есть модуль, который обрабатывает CSV-файл как вход. Он отлично работает на моей машине Ubuntu, пока кто-то из моей команды не начнет использовать Microsoft Excel для создания csv.

В результате новый входной CSV имеет на нем символы ^ M (\ r \ n), и из-за этого в моем коде предполагается, что CSV состоит только из 1 строки, и все данные заполняются в $ header.

Я изменил режим чтения на «rt», так как php.net советует открывать текст в режиме t, но проблема все еще существует. Кажется, что rt работает только для Windows, чтобы преобразовать \ n в \ rn.

Из PHP.NET : Windows предлагает флаг перевода текстового режима ('t'), который будет прозрачно переводить \ n на \ r \ n при работе с файлом. Напротив, вы также можете использовать «b» для принудительного двоичного режима, который не будет транслировать ваши данные. Чтобы использовать эти флаги, укажите либо «b», либо «t» в качестве последнего символа параметра режима.

Есть ли способ принять оба типа новой строки (Microsoft и UNIX), желательно, только изменив код PHP? Я понимаю, что есть команда dos2unix (fromdos in ubuntu), но последний Ubuntu не имеет этого по умолчанию, и я хочу воздержаться от установки другой утилиты.

Ниже мой текущий исходный код:

$row = 1; if (($handle = fopen($file, "r")) !== FALSE) { while (($data = fgetcsv($handle)) !== FALSE) { $num = count($data); if($row == 1) { $header = $data; }else { $rows[$row-1] = $data; } $row++; } fclose($handle); }