ごみばこ

プログラムに関する備忘録などを書いています。

PHPでUTF-8(BOMあり)のcsvを扱う

最近CSVを操作する処理を書いていて、文字コードに嵌ったのでメモ。

BOMとは

  • バイトオーダーマークの略
  • ファイルの先頭に数バイトを付与して、それ以降のデータがunicodeであることを表す

この数バイトが読み込む時に邪魔をしていた。

BOMを除去する

  • pack()でBOMを表す文字列を作成して、preg_replace()で除去することが出来た。
    • 他に良い方法があれば教えて頂けると幸いです。
$bom = pack('H*', 'EFBBBF');
$str = preg_replace("/^$bom/", '', $bomStr);

参考

How to remove multiple UTF-8 BOM sequences before “<!DOCTYPE>”?

Excelcsv保存はBOMなしでも文字化けしないようにしてほしい。