PHP генерирует csv, не отправляя правильные новые строки
У меня есть script, который генерирует файл csv, используя следующий код:
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="'.date("Ymdhis").'.csv"');
print $content;
Переменная $content просто содержит строки с полями, разделенными запятыми, а затем завершена с помощью. "\n"; для создания новой строки.
Когда я открываю файл в csv, он выглядит хорошо, однако, когда я пытаюсь использовать файл для импорта во внешнюю программу (MYOB), он не распознает символ End Of Line (\n) и принимает одну длинную строку текст.
Когда я просматриваю содержимое файла в блокноте, символ конца строки (\n) представляет собой небольшой прямоугольник, который выглядит как код символа 0x7F.
Если я открою файл и заново сохраню его в excel, он удалит этот символ и заменит его соответствующим символом конца строки, и я могу импортировать файл.
Какой символ мне нужно генерировать на PHP, чтобы блокнот распознал его как действительный символ конца строки? (\n), очевидно, не выполняет эту работу.
Ответы
Ответ 1
Используйте "\ r\n". (с двойными кавычками)
Вышеупомянутые символы ascii для возврата каретки + строки.
Исторически это относится к ранним дням вычислений по телетайпам, когда выход был напечатан на бумаге и возврат каретки телеисточника в начало линии был отдельной операцией для подачи линии через принтер. Вы можете перезаписать строки, просто вернув карету и вставьте пустые строки только фидом строк. Выполнение обоих вернул голову в начало строки и подало ей новую строку для печати.
То, что именно требовалось, различалось между системами -
- Только для линии: - большинство систем, подобных Unix.
- Возврат каретки плюс подача линии: - системы DEC и MS-DOS.
- Только возврат каретки: - Ранние Apple/Mac OS
Итак, то, что вы создаете на данный момент, это новая строка только в системе Unix. Википедия имеет довольно хорошую страницу.
На самом деле инструменты командной строки unix также выполняют преобразование. Команды unix2dos и dos2unix преобразуют текстовые файлы ascii назад и вперед между форматами unix и dos, преобразуя линейный канал в линейный канал плюс возврат каретки и наоборот.
Ответ 2
Обязательно используйте двойные кавычки вокруг \r\n, а не одиночные кавычки, как указано в предыдущем ответе!
Ответ 3
У меня возникла одна и та же проблема. Позже я заменил одинарные кавычки '
с двойными кавычками "
$content.
то есть. Сохранение внешних котировок скорее удваивается, чем одно значение в переменной $content.
И это сработало:)