1

ユーザーが選択したSQLデータのASCIIテキストダウンロードを実行したいのですが、これはメモ帳ですぐに開くことができます。ダウンロードを開始するための「ヘッダー」コマンドと同様に、DB接続は正常に機能しますが、行末文字を正しく表示できるようになると、気になります。

ヘッダーは、次の方法で静的に定義されます。

$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文字を使用して行を適切にフォーマットしようとすると、行フィードが必要な場所に不明な文字(四角いボックス)が含まれる単一行になります。なれ。

ファイルをサーバーに書き込んでから、ストリームを読み取って出力してみました。ヘッダー情報のバリエーションを試してみました...ちょっと、ページがバイナリを介してブラウザにダウンロードされる方法に何か奇妙なことがあると思いますが、?

私は何が欠けていますか?

どうもありがとう。

4

2 に答える 2

0

「\n」または「\r\ n」を使用する代わりに、これには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;
于 2012-06-08T12:30:08.340 に答える
0

headerUTF-8として追加してみてください。

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

それが役に立てば幸い!:)そうでない場合は、PHPコードでUTF-8を確認してくださいBOM

于 2012-06-08T12:23:34.190 に答える