PHP で UTF-8 ファイルから読み込んだデータの BOM を取り除く

SPECIAL


UTF-8 の BOM (Byte Order Mark) を取り除く

UTF-8 ファイル形式には、ファイル内に含まれるテキストデータの並び順を示す BOM (Byte Order Mark) がファイルの先頭に付加されている場合があります。

PHP でそのようなファイルを読み込んで連結するようなことをするとき、ファイルの先頭にあれば十分な BOM が、連結された途中にも挿入されてしまう場合があります。そこで今回は UTF-8 ファイルを読み込んだときに BOM を消去する方法について記してみたいと思います。

 

例えば、次のようなプログラムで、$data にファイルのデータを行毎に読み込んでいるとします。

$data = array();

 

$file = @fopen($path, 'rb')

 

while (!feof($file))

{

$data[] = fgets($file);

}

 

fclose($file);

BOM は最初の行に含まれるので、次のようにして、BOM を消去することが可能です。

$data[0] = preg_replace('/^\xEF\xBB\xBF/', '', $data[0]);

UTF-8 の BOM は 0xEF, 0xBB, 0xBF という 3 バイトで構成されているようなので、先頭からその 3 文字を見つけてそれを空文字列に置き換えてあげることで、BOM を消去しています。