PHP 生成的 ASCII txt 下载的行尾字符


End of line character for PHP-generated ASCII txt download

我想对用户选择的SQL数据进行ASCII文本下载,可以立即在记事本中打开。 数据库连接工作正常,启动下载的"header"命令也是如此,但如果能让行尾字符正确显示,我会该死的。

标头通过以下方式静态定义:

$header = <<<EOD
  #Some header information
  #goes here on multiple
  #lines
  EOD;

每行数据与选项卡连接:

$RS_SQL = $DBinterface->dbGetRecordSet($someQuery);
foreach($RS_SQL as $row) {
  $rowdata = '';
  foreach($row as $key=>$val) {
    if((!(int)$key) && $key!='0') {
      $rowdata[] = $row[$key];
    }
  }
  $dataOutput.=implode("'t",$rowdata)."'n";
}
header("Content-type: text/plain; charset=ISO-8859-1");
header("Content-Disposition: attachment; filename=SQLDataExport.txt");
echo $header."'n".$dataOutput;

标题显示在记事本中,并且所有选项卡间距都与设计完全一致......但是,任何通过 ''r 或 ' 字符很好地设置行格式的尝试都会导致单行包含未知字符(方框),其中换行符应该在。

我尝试将文件写入服务器,然后读取流并输出; 尝试了标头信息的变体...有点明白页面通过二进制下载到浏览器的方式有些奇怪,但是?

我错过了什么?

非常感谢。

不要使用 "'"

或 "''r'",而是使用 PHP_EOL。 它处理任何跨平台问题,适用于编写要保存在服务器或客户端上的文件。

这个问题有一些信息,可以认为与你要做的事情有关。

你会这样使用它:

$RS_SQL = $DBinterface->dbGetRecordSet($someQuery);
foreach($RS_SQL as $row) {
  $rowdata = '';
  foreach($row as $key=>$val) {
    if((!(int)$key) && $key!='0') {
      $rowdata[] = $row[$key];
    }
  }
  $dataOutput.=implode("'t",$rowdata).PHP_EOL;
}
header("Content-type: text/plain; charset=ISO-8859-1");
header("Content-Disposition: attachment; filename=SQLDataExport.txt");
echo $header."'n".$dataOutput;

尝试将其作为 UTF-8 添加到header中:

header("Content-type: text/plain; charset=utf-8");

希望对您有所帮助! :)如果没有,请检查您的 PHP 代码是否有任何 UTF-8 BOM