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

时间:2012-06-08 12:21:58

标签: php html download http-headers ascii

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

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

$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或\ n字符很好地格式化行的尝试都会导致单行包含未知字符(方框)换行应该是。

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

我错过了什么?

非常感谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

This question有一些信息,可以认为与您要做的事情有关。

你会像这样使用它:

$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;