2010-04-30 38 views
12

我有一个用下面的代码生成一个CSV文件的脚本:没有发出正确的新行PHP生成CSV提要

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

的$内容变量只包含用逗号分隔的字段行,然后用定型。 “\ n” 个;生成一个新的行。

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

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

如果我打开该文件并将其重新保存在Excel中,它消除了这个角色,并与行字符的正确端替换它,我可以导入该文件。

什么角色,我需要在PHP中被产生,这样的记事本将其识别为一个有效的结束换行符? (\ n)显然不会完成这项工作。

回答

20

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

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

从历史上看,这涉及到在输出打印到纸张上时,在传真机上进行计算的早期时间,并且将电传打印头的托架返回到行的起始处是单独操作以通过打印机进行传送。您可以通过仅执行回车并通过换行插入空行来覆盖行。两人都将头部放回线路的起始位置,并给它一条新的线路打印。只有

  • 换行: - -

    恰恰是需要什么样的系统之间的差别大多数的Unix类系统

  • 回车加换行: - DEC AMD基于MS-DOS系统
  • 回车符只: - 早期的Apple/Mac OS的

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

实际上也有unix命令行工具来进行转换。 unix2dos和dos2unix命令通过将换行符转换为换行符和回车符以及反之亦然,在ASCII和DOS格式之间转换ascii文本文件。

4

确保周围使用\ r \ n双引号,而不是在前面的答复中提到的单引号!

0

我遇到了同样的问题。稍后我将
单引号'用双引号" 建筑$ content变量。

即保持外引号,而不是单一的一倍$内容变量。

它的工作:)