PHPから Excel用 UTF8のCSVの出力

PHPから Excel用 UTF8のCSVを出力します。

  • Excelで開きたい。
  • 汎用のCSV形式にしたい。Excel専用にはしたくない。
  • 改行が含まれるデータが存在する。
  • UTF-8 のままで出力したい。Shift-JISへ変換できない文字が含まれている。

※ ExcelのCSVはShift-JISで、改行コードが混在します。ファイルをダブルクリックで開く場合と、テキストファイルの読み込みで開く場合とで挙動が異なります。

解決策

この2つがポイントです。

  • 拡張子を.csvにする
  • 先頭にUTF8を宣言するBOMを付ける

実際のコードです。

<?php
header("Cache-Control: public");
header("Pragma: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=data.csv");

//BOM
echo pack('C*',0xEF,0xBB,0xBF);

//データはここから
foreach($rows as $row){
    echo ・・・
}