PHP生成csv没有发送正确的新换行符

时间:2010-04-30 06:34:16

标签: php csv newline

我有一个使用以下代码生成csv文件的脚本:

header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="'.date("Ymdhis").'.csv"');
print $content;

$ content变量只包含以逗号分隔的字段,然后用。“\ n”结束。生成一个新行。

当我在csv中打开文件时它看起来不错,但是当我尝试使用该文件导入外部程序(MYOB)时,它无法识别行尾(\ n)字符并假设一行长行文本。

当我在记事本中查看文件的内容时,行尾字符(\ n)是一个小矩形框,看起来像字符代码0x7F。

如果我打开文件并将其重新保存在excel中,它将删除此字符并将其替换为正确的行尾字符,然后我可以导入该文件。

我需要在PHP中生成什么字符,以便记事本将其识别为有效的行尾字符? (\ n)显然不能胜任这项工作。

3 个答案:

答案 0 :(得分:20)

使用“\ r \ n”。 (带双引号)

以上是回车+换行的ascii字符。

历史上,这涉及在输出被打印到纸张上并且将电传打印头的滑架返回到线的起点时的电子式计算的早期阶段是通过打印机馈送线的单独操作。您可以通过回车来覆盖行,并仅通过换行符插入空行。两者都将头部返回到行的开头并为其打印一条新行以进行打印。

系统之间需要什么不同 -

  • 仅限换行: - 大多数类Unix系统
  • 回车和换行: - 基于MS和DOS的系统
  • 仅回车: - Apple / Mac OS早期

所以你现在所生成的只是Unix系统上的换行符。维基百科对此有很多good page

实际上还有unix命令行工具来进行转换。 unix2dos和dos2unix命令通过将换行符转换为换行符加回车符来反转ascii文本文件在unix和dos格式之间的前后转换,反之亦然。

答案 1 :(得分:4)

请务必在\ r \ n周围使用双引号,而不是上一个答案中提到的单引号!

答案 2 :(得分:0)

我遇到了同样的问题。后来我换了     双引号'的单引号"  构建 $ content 变量。

即。在 $ content 变量中保留外部引号相当于单个引号。

它有效:)

相关问题