【问题标题】:PHP generating csv not sending correct new line feedsPHP 生成 csv 未发送正确的换行符
【发布时间】:2011-02-14 02:58:05
【问题描述】:

我有一个使用以下代码生成 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) 显然不能胜任。

【问题讨论】:

    标签: php csv newline


    【解决方案1】:

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

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

    从历史上看,这与早期的电传打字机计算有关,当时将输出打印到纸上,并且将电传打字机头的托架返回到行的开头是通过打印机送行的单独操作。您可以通过回车来覆盖行,并通过换行插入空行。两者都将头部返回到行首并为其提供一个新行以进行打印。

    系统之间的确切要求有所不同 -

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

    因此,您目前生成的只是 Unix 系统上的换行符。维基百科对此有相当多的good page

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        即在 $content 变量中保留外引号而不是单引号。

        它成功了:)

        【讨论】:

          猜你喜欢
          • 2011-01-08
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多