PHPでCSVファイルににデータをダウンロードする場合、
下記のソースコードを使いました。
###【説明】
######1. PHPファイルのエンコーディング: EUC-JP(適切に変更してください)
目的:$data_arrayのデータのエンコーディング と タイトルのエンコーディングを EUC-JPにするため。
######2. Excelで文字化けしないように、SJISに変更する必要があります。
echo mb_convert_encoding($str,"SJIS","EUC-JP");
######3. 数字の場合、Excelで勝手に変な数字に変換されないように
="数字" の形式で出力しましょう。
※変な数字:数字は大きすぎる場合、科学表記になってしまう等
######4. 出力データにコンマ(,), 改行コードも入っている場合、
ダブルクォーテーション(")でデータを囲んで出力する。 例) "データ1", "データ2", "データ3"....
$now = date("Ymd_His");
mb_http_output("EUC-JP");
header("Content-Type: application/octet-stream");
header("Content-disposition: attachment; filename=filename_".$now.".csv");
$str = "カラム1, カラム2, カラム3, カラム4\n";
foreach ($data_array as $row) {
$str .= "\"".$row[1]."\",";
$str .= "\"".$row[2]."\",";
$str .= "\"".$row[3]."\",";
$str .= "=\"".$row[4]."\","; // 数字はExcelで綺麗に表示されるように ="数字" の形に出力する
$str .= "\n";
}
echo mb_convert_encoding($str,"SJIS","EUC-JP");
exit;