Подтвердить что ты не робот

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), очевидно, не выполняет эту работу.

4b9b3361

Ответ 1

Используйте "\ r\n". (с двойными кавычками)

Вышеупомянутые символы ascii для возврата каретки + строки.

Исторически это относится к ранним дням вычислений по телетайпам, когда выход был напечатан на бумаге и возврат каретки телеисточника в начало линии был отдельной операцией для подачи линии через принтер. Вы можете перезаписать строки, просто вернув карету и вставьте пустые строки только фидом строк. Выполнение обоих вернул голову в начало строки и подало ей новую строку для печати. ​​

То, что именно требовалось, различалось между системами -

  • Только для линии: - большинство систем, подобных Unix.
  • Возврат каретки плюс подача линии: - системы DEC и MS-DOS.
  • Только возврат каретки: - Ранние Apple/Mac OS

Итак, то, что вы создаете на данный момент, это новая строка только в системе Unix. Википедия имеет довольно хорошую страницу.

На самом деле инструменты командной строки unix также выполняют преобразование. Команды unix2dos и dos2unix преобразуют текстовые файлы ascii назад и вперед между форматами unix и dos, преобразуя линейный канал в линейный канал плюс возврат каретки и наоборот.

Ответ 2

Обязательно используйте двойные кавычки вокруг \r\n, а не одиночные кавычки, как указано в предыдущем ответе!

Ответ 3

У меня возникла одна и та же проблема. Позже я заменил   одинарные кавычки ' с двойными кавычками "   $content.

то есть. Сохранение внешних котировок скорее удваивается, чем одно значение в переменной $content.

И это сработало:)