2

次のコードは、「レポート行」を配列として取得し、fputcsv を使用して CSV に変換します。私が使用する文字セットに関係なく、ファイルの先頭に UTF-8 bom を配置しているという事実を除いて、すべてがうまく機能しています。A) 私は iso を指定しており、B) 多くのユーザーが UTF-8 bom をガベージ文字として表示するツールを使用しています。

結果を文字列に書き込んで、UTF-8 BOM を削除してから、それをエコーアウトして取得しようとしました。問題が Apache にある可能性はありますか? fopen をローカル ファイルに変更すると、UTF-8 BOM なしで問題なく書き込みます。

header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");

$outstream = fopen("php://output",'w');

for($i = 0; $i < $report->rowCount; $i++) {
    fputcsv($outstream, $report->getTaxMatrixLineValues($i), ',', '"');
}
fclose($outstream);

exit;
4

2 に答える 2

8

私の推測では、php ソース コード ファイルに BOM があり、php の出力バッファリングが有効になっていると思います。

于 2010-04-05T01:57:12.037 に答える
0

これで問題が解決するかどうかはわかりませんが、print 関数と implode 関数を使用して同じことを試してみましたか?

header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");

for($i = 0; $i < $report->rowCount; $i++) {
    print(implode(',',$report->getTaxMatrixLineValues($i)));
}

それはテストされていませんが、かなり明白です。

于 2010-04-05T19:14:26.300 に答える