PHPでUTF-8のBOMファイル検索方法

この記事のきっかけは、UTF-8システムにてSJIS形式のCSVダウンロード処理時に

おかしな文字化けが起こる事がきっかけでよくよく調べてみると、

ダウンロードされたファイルにBOMがくっついていました。

で、一つ一つBOMファイルを探すのは手間がかかってしまうので

BOMファイルを一発で検索するプログラムを紹介します。

s('検索されるディレクトリ(ドキュメントルートかな)/');

function s($target_dir) {
    chdir($target_dir);
    $files = glob('*');
    if (!is_array($files)||count($files)==0) return;
    foreach ($files as $file) {
        $path = $target_dir.$file;
        if (is_dir($path)) {
            s($path.'/');
        }else {
            $contents = file_get_contents($path);
            if (hasbom($contents)) {
                echo "<p>$path</p>";
            }
        }
    }
}

function hasbom($contents) {
    return preg_match("/^efbbbf/", bin2hex($contents[0] . $contents[1] . $contents[2])) === 1;
}

適当な名前(bomcheck.php)で保存して、

php bomcheck.php

これで一発検索。

この記事に大変感謝します。

該当のBOMファイルからBOMを除去して実行したら文字化けは治りました。

めでたしめでたし(笑)

ちなみにBOMファイルの確認方法は、サクラエディタで該当ファイルを選び

「名前を付けて保存」時に、BOMにチェックがついていればBOM付のファイルになります。


コメントを残す




Menu

HOME

 TOP