その場合、先頭とファイル中に2つ以上BOMが存在することになり、PHPでファイル内のBOMを全て除去したいのですが、単純に以下の処理を行っても問題ないのでしょうか?
$str = str_replace("\xef\xbb\xbf", '', $str);
問題があるとすれば、代替案も提示して頂けると有り難いです。
宜しくお願いします。
0xBBBF は、ハングルにマッピングされているエリアです。
→ Unicode一覧 B000-BFFF - Wikipedia
第2バイトに、0xEF がくる文字も当然あります。
0xBBBF → 뮿
0xBBEF 0xBBBF → 믯뮿
扱っているテキストファイルに、ハングルが入ってないことが保証されているのであれば、機械的に 3byte を削除して問題ないと思います。
googleで「php BOM 除去」または「pho BOM 削除」で検索するといいよ。
みんなBOM削除を1つの機能として見なして関数にして分けてる。
PHPでUTF-8のBOMを削除する方法
http://unsolublesugar.com/20120919/223812/
1機能を1行書きするのはナンセンスだと思う。
> ファイルの途中に入ってる BOM を除去したいんだ、と質問している
質問文には「ファイル内のBOMを全て除去したい」とありますけど?
残念ながらネット上のものは先頭BOMの除去だけのものが多くて。
こちらが意図してるのはa-kuma3さんが仰るように先頭だけでなく、ファイルの途中のBOMも削除したいのです。説明の書き方が悪かったら申し訳ありません。
> 単純に以下の処理を行っても問題ないのでしょうか?
「ファイル内のBOMを全て除去したい」との事ですから問題ないハズです。
もしも「途中に入っているBOM」であるなら、アレコレやるより全部削除しておいて先頭に付け足すのが一番お手軽では?
わざわざ str_replace() よりも高コストの正規表現でやる必要もないですから。
BOM付のUTF-8なファイルを単純に連結したファイルがあるという前提で書きましたが、何か不都合な所がありましたか?
str_replace() は与えた文字列中の全ての対象文字列を置換してくれますから、目的に適っていると思うのですけど?
単純にそのファイルを読み出して str_replace() で全ての BOM を削除したうえで保存(同名で上書きでも、別名で新規でもお好きな方で)すれば問題ないです。
なるほど。文章を読み違えてました。失礼しました。
遅れましたが回答有り難うございます。
0xBBBF は、ハングルにマッピングされているエリアです。
→ Unicode一覧 B000-BFFF - Wikipedia
第2バイトに、0xEF がくる文字も当然あります。
0xBBBF → 뮿
0xBBEF 0xBBBF → 믯뮿
扱っているテキストファイルに、ハングルが入ってないことが保証されているのであれば、機械的に 3byte を削除して問題ないと思います。
はい。utf-8は符号化したオクテット列の途中からが別の符号化オクテット列と一致することがないように設計されてます。BOM (U+feff)には一応zero-width no-break spaceという文字が割り当てられていますが、現状ではその目的で文書中に現れることは無いとみなしてよいと思います (厳密に仕様に従うなら、文書途中でゼロ幅非改行空白として使われる可能性を考慮しないとならないですが、当のUnicode自身がその使い方を非推奨にしてますんで)。
もともとの質問についてはphpの文字列操作関数が文字列をどう扱っているか知らないので答えられないのですが、単なるオクテット列とみなしているならEF BB BFを削除するので問題ないと思います。
質問者です。
削除は特に問題ないようでよかったです。
お二方どうも有り難うございました。勉強になります。
はい。utf-8は符号化したオクテット列の途中からが別の符号化オクテット列と一致することがないように設計されてます。BOM (U+feff)には一応zero-width no-break spaceという文字が割り当てられていますが、現状ではその目的で文書中に現れることは無いとみなしてよいと思います (厳密に仕様に従うなら、文書途中でゼロ幅非改行空白として使われる可能性を考慮しないとならないですが、当のUnicode自身がその使い方を非推奨にしてますんで)。
2013/11/27 11:00:05もともとの質問についてはphpの文字列操作関数が文字列をどう扱っているか知らないので答えられないのですが、単なるオクテット列とみなしているならEF BB BFを削除するので問題ないと思います。
質問者です。
2013/11/28 18:40:21削除は特に問題ないようでよかったです。
お二方どうも有り難うございました。勉強になります。