お久しぶりですmarcoです。
集計結果をCSVで吐き出すような簡単なスクリプトを作ったのですが、タイトルの通りBOMにやられたのでメモ書き。
BOM爆弾
さて今回CSVをPHPでエンコード(UTF-8→Shift_jis)して吐き出すようにしたのですが
出力データがエンコードされませんでした。
いろいろ検証した結果、先頭になんかよくわからん文字化けしてるデータを発見しなんかBOMっぽいなー
ということまではわかったのですが、何故BOMがついてしまうのかわからず・・・。
最終的に、ソースファイル自体がBOM付きでプログラムを記述していたため、CSV出力時もそれにならってBOM付きで
ご丁寧にも出力してくれていました。
そもそもソースにBOMがついた理由
基本的に普段BOMをつけたりはしていない(特に意識していない)ので、何故ついたのか不思議だったのですが
Windowsのデフォルトのメモ帳(NotePad)が自動でBOM付き保存する仕様でした。
今回のソースを設置するために使用するPCが指定されていて、テキストエディタがデフォルトのものしかなかったので
そのPC上で環境に合わせて少しソースをいじった際にBOMがついてしまったようです。
いつもマイクロソフトにはしてやられるなぁ〜