BOM付UTF-8のCSVをCakeで
お盆前にリリースが重なったりでバタバタしました。
お盆は実家&義実家にトータル1週間帰省。
プールしたり、海に行ったり、近所の池に亀(大好き)を見にいったりと楽しく過ごした赤子、休み明けの現在見事に保育園登園拒否になりましたorz
*
PHPとのお付き合い4か月目。ちょっとお友達になれてきた今日この頃です。
先日、cakephpでBOM付UTF-8でCSV吐くという処理を書きました。
初歩的なことなんですが「fgetcsvのサンプルならたくさん見つかるのに…」ってなったのでメモ。
★cakephpのFile ユーティリティクラスでBOM付UTF-8★
//ファイルのインスタンス生成
$file = new File(<ファイルパス>);
//ファイルを作成
$file->create();
//BOM文字をパッキングして出力
$bom=pack('C*',0xEF,0xBB,0xBF);
$file->append($bom);
$file->append(<出力する文字列>);
//必要に応じてUTF-8に文字列を変換したり
$file->append(mb_convert_encoding(<出力する文字列>, "UTF-8", <変換前の文字コード>));
★Excelで開いたときに「001」とかが「1」になっちゃうのの対策とExcel上の表示★
- 囲み文字を"から'に変更→'001'
- タブ文字を追加→001 (テキストエディタ上では001<tab文字>)
- タブ区切り、UTF-16LE BOM付きで出力して拡張子はcsvに偽装(ただしあくまで偽装。厳密にはTSV)
新人さん「BOMってなんですか」
私「バイトオーダー…なんだっけド忘れした…」 ※マーク