从PHP制作CSV - 回车不起作用

时间:2010-05-25 04:08:34

标签: php csv carriage-return

似乎是一个相当简单的问题,但无法让它发挥作用。我让用户下载一个csv文件(工作正常)。

基本上我不能让回车上班。

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

结果:名称年龄\ n“Chuck Norris”70

试过:

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

结果:名称年龄\ n Chuck Norris 70

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

结果:名称年龄\ n \ r \ nChuck Norris 70

知道出了什么问题?

2 个答案:

答案 0 :(得分:7)

关于CSV,请参阅Brenton的回答。至于“为什么它不起作用”的答案:

Yup,/ n和类似的只能在双引号中工作:)

e.g。

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

或(这看起来很糟糕)

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

但为了便于阅读:

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

答案 1 :(得分:4)

作为替代方案,可能是更强大的解决方案。 PHP具有内置函数(并非总是如此)。 fputcsv会将正确转义的csv行写入流中,如果您尝试输出到浏览器,则可以使用标准输出(stdout)流而不是文件指针。

例如

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

foreach ($list as $line) {
    fputcsv(STDOUT, $line);
}