次のコードは、「レポート行」を配列として取得し、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;