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

sjw*_*sjw 12 php csv newline

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

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

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

当我打开CSV文件看起来好像没什么但是,当我尝试使用该文件导入到外部程序(MYOB)它不承认结束线(\n)的角色和承担文本的一个长行.

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

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

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

Cru*_*han 20

使用"\ r \n".(带双引号)

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

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

系统之间究竟需要什么不同 -

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

所以你现在所生成的只是Unix系统上的换行符.维基百科有相当不错的页面.

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


Bri*_*son 5

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