PHPでUTF-8のBOM対策をする

PHP

PHPでテキストファイル読み込みを実装した際にはまったので備忘録として記載します

BOMとは

UTF-8のテキストファイル読み込みを行う際はBOMというものを考慮する必要があります。

BOMとは

Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。 (Wikipediaより)

UTF-8のテキストファイルを読み込み、strlenなどで文字列の長さを調べ、想定より長かったらこいつが原因です。

var_dumpなどの画面出力で出力されないのも厄介ですね。私は最初「ヌル文字」と勘違いして小一時間悩みました。

BOM対策

PHPであれば下記のコードで文字列からUTF-8のBOMを削除することができます。

preg_replaceで先頭についているBOMを空文字に置き換えるだけですね。

エンコードタイプがUTF-16BEの場合は下記でいけるはずです。

preg_replace(‘/^\xFE\xFF/’, ”, $str);

他のエンコードタイプに関しましてはwikiの各符号化形式を確認してください。

コメント

タイトルとURLをコピーしました