~ダブルクリックでMicrosoft社Excelで文字化けせずに開けられる文字コードUTF-8のCSVファイルをPHPで生成する
普通にPHPでUTF-8のCSVファイルを生成してダウンロードしたファイルをダブルクリックしてエクセルで開くと、 文字化けして表示されてしまうので、BOM付きのCSVファイルを生成すれば、文字化けしなくなります。
- UTF-8のBOM
- pack('CCC',0xEF,0xBB,0xBF)
- UTF-16リトルエンディアンのBOM
- pack('CC',0xFF,0xFE)
- UTF-16ビッグエンディアンのBOM
- pack('CC',0xFE,0xFF)
※pack関数の第一引数の"C"は、符号無しChar型つまりバイト型という意味。"CCC"は符号なしChar型が3つの意味になります。
<?php mb_internal_encoding("UTF-8"); //CSVファイルの先頭にUTF-8のBOMを付与する $csv=pack('CCC',0xEF,0xBB,0xBF). //UTF-8のBOM mb_convert_encoding( //念のためUTF8に変換していますが文字コードが既にUTF-8の場合は不要 '"項目","値1","値2"'."\r\n". '"項目1",1,2'."\r\n". '"項目2",2,2'."\r\n". '"項目3",3,5'."\r\n" ,"UTF-8" ); //ファイルサイズの取得 $filesize=strlen($csv); //ダウンロードファイル名の設定(IEに対応するにはファイル名を文字コードShift-JISに変換する) $filename=mb_convert_encoding("CSVファイル名.csv","SJIS","UTF-8"); header('Content-Type: application/octet-stream'); header('Content-Length: '.$filesize); header('Content-Disposition: attachment; filename='.$filename); echo $csv;