PHPでExcelで文字化けしないようにShift-JISで出力するためのコード


備忘用に貼り付けときます。

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

同じように悩んだ方はぜひ使ってください。

[RelService] [Service]