PHPでテキストファイル読み込みを実装した際にはまったので備忘録として記載します
BOMとは
UTF-8のテキストファイル読み込みを行う際はBOMというものを考慮する必要があります。
BOMとは
Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。 (Wikipediaより)
UTF-8のテキストファイルを読み込み、strlenなどで文字列の長さを調べ、想定より長かったらこいつが原因です。
var_dumpなどの画面出力で出力されないのも厄介ですね。私は最初「ヌル文字」と勘違いして小一時間悩みました。
BOM対策
PHPであれば下記のコードで文字列からUTF-8のBOMを削除することができます。
1 2 3 4 |
$str = "UTF-8のBOMありテキストファイルから読み込んだ文字列"; // BOM削除 $str = preg_replace('/^\xEF\xBB\xBF/', '', $str); |
preg_replaceで先頭についているBOMを空文字に置き換えるだけですね。
エンコードタイプがUTF-16BEの場合は下記でいけるはずです。
preg_replace(‘/^\xFE\xFF/’, ”, $str);
他のエンコードタイプに関しましてはwikiの各符号化形式を確認してください。
コメント