PHPでCSVを文字コードShift-JISに変換してダウンロード出力する方法。
クライアントから出力してそのままダブルクリックでExcelで開きたいということで、
いろいろと調べたところ、結局これでうまく動きました。
自分でCSVフォーマットにテキストを変換する方法もあるけれど、
信頼できそうな
fputcsv()
を使って出力しました。
サイトのよってはうまく動かない解説もあったりしたので、
最終的に上手く動いたコードを備忘に掲載。
/* CSVダウンロード */
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename={$file_name}");
header('Content-Transfer-Encoding: binary');
// アウトプットストリームを取得
$fp = fopen('php://output', 'w');
// 文字コードをShiftJISに変換するフィルター
stream_filter_prepend($fp, 'convert.iconv.utf-8/cp932');
fputcsv($fp, $labels, ',', '"');
foreach ($data as $row) {
fputcsv($fp, $row, ',', '"');
}
fclose($fp);
同じように悩んだ方はぜひ使ってください。
他の記事を検索: