Создание CSV из PHP - возврат каретки не будет работать

StackOverflow https://stackoverflow.com/questions/2901951

  •  04-10-2019
  •  | 
  •  

Вопрос

Похоже, довольно простая проблема, но не может заставить его работать. Я получаю пользователя, чтобы загрузить файл CSV (который работает нормально).

По сути, я не могу получить перевозку на работу.

header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=search_results.csv");
echo '"Name","Age"\n"Chuck Norris","70"';
exit;

Результат : Имя Возраст N "Чак Норрис" 70

Пытался :

echo '"Name","Age",\n,"Chuck Norris","70"';

Результат : Имя Возраст n Чак Норрис 70

А также

echo '"Name","Age",\n\r,"Chuck Norris","70"';

Результат : Имя Возраст n r Чак Норрис 70

Знать, что происходит не так?

Это было полезно?

Решение

Что касается CSV, см. Ответ Brendon. Что касается «Почему это не сработало» ответа:

YUP, / N и подобная работа только в двойных цитатах :)

например

echo '"Name","Age"' . "\n" . '"Chuck Norris","70"';

или (это выглядит ужасно)

echo "\"Name\",\"Age\"\n\"Chuck norris\",\"79\"";

Но для читаемости ради:

 $nl = "\n";
   echo '"Name","Age"' . $nl .  '"Chuck Norris","70"';

Другие советы

Как альтернатива, вероятно, более надежное решение. PHP имеет встроенную функцию (не так ли всегда). fputcsv. Запишите правильно сбежавшую строку CSV в поток, если вы пытаетесь выводить в браузер, вы можете использовать стандартный выходной (STDOUT) поток вместо указателя файла.

например.

$list = array (
  array('Name', 'Age'),
  array('Chuck Norris', 79)
);

foreach ($list as $line) {
    fputcsv(STDOUT, $line);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top