У меня есть модуль, который обрабатывает 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); }