【PHP】UTF-8のBOMを削除する方法

function remove_utf8_bom($text)
{
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}
php - How to remove multiple UTF-8 BOM sequences before ""? - Stack Overflow

文頭(^)のBOMコード($bom)をpreg_replaceで空文字(’’)に置換する関数です。これを使えば簡単にBOMを削除できます。

Excel 2016のUTF-8でのCSV出力

CSV (UTF-8) Support
In Excel
You asked for it! You can now save and open CSV files that use UTF-8 character encoding, and enjoy better support when working with
files that contain non-English data as well as ease of moving data to other applications.
What's new and improved in Office 2016 for Office 365 - Office Support


Excel 2016の最近のアップデートからUTF-8でのCSV保存できるようになったようなのですが、BOM付きみたいです。なしにできる設定がどこかにあるのかもわかりませんが見つからず。

そういえば、Windowsのメモ帳もBOMありで保存されて、BONなしにできないのでExcelもそうなのかも・・。

その他の方法?!

説明にBOM削除と書いてるのに、PHPコードがそうでないのを検索で見かけたのですが・・・。
PHPコードは以下と同じです。

8 bit extended ASCII?

You fell into a Hot Tub Time Machine, and you're back in the eighties. If you've got some form of 8 bit ASCII, then you might want to keep the chars in range 128-255. An easy adjustment - just look for 0-31 and 127

$string = preg_replace('/[\x00-\x1F\x7F]/', '', $string);
utf 8 - PHP: How to remove all non printable characters in a string? - Stack Overflow


たぶん、文字以外のコード(制御コード)を除くロジックがこれで、BOM削除にも使えるよね?!みたいな雰囲気です。
もしかすると、BOM付きのテキストをマージしたものを、あとからBOMを削除したいという場合とかにはつかえるのかも。

そうでない限りは、素直にファイル先頭のBOMコードを削除したほうが安全だと思う。

スポンサーリンク

コメントを残す

メールアドレスは公開されません。
また、コメント欄には、必ず日本語を含めてください(スパム対策)。