Создание CSV из PHP - возврат каретки не будет работать
-
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);
}