PHP генерирует csv, не отправляя правильные новые строки

У меня есть сценарий, который генерирует файл 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), очевидно, не выполняет эту работу.

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

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

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

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

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

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

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

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

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

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

И это сработало 🙂