web-dev-qa-db-ja.com

PHPでBOMを使用して文字列をUTF-8としてエンコードする

utf8_encodeを使用しているときにPHPにBOMを追加するように強制するにはどうすればよいですか?

これが私がやろうとしていることです:

$Zip->addFromString($filename, utf8_encode($xml));

残念ながら(私にとって)、結果には最初にBOMマークがありません。

24
Jeano

自分で追加してみましたか?

TF-8 BOM0xEF 0xBB 0xBFのようですので、文字列に添付できますafter UTF-8に変換します。

$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;

ただし、注意してください。 utf8_encode はISO-8859-1文字列が必要です。 XMLを使用している場合は、XMLがalready UTF-8でエンコードされていないことを確認してください。ドキュメントのコメントは、関数がさまざまな楽しい方法で壊れていることを示唆しているので、必要な場合を除き、関数を捨てないでくださいknow.

PHP文字列は単純に無知で無知のバイトです。文字列には文字セットがアタッチされていないため、文字列内のデータがすでにUTF-8である場合は必要ありません。変換を実行します。

また、リンクされたウィキペディアの記事はこれを言っています:

Unicode標準では、UTF-8でのBOMが許可されていますが、必須ではありません。バイト順はUTF-8では意味がないため、BOMはテキストストリームまたはファイルをUTF-8として、またはBOMを含む別の形式から変換されたことを識別するためにのみ機能します。

そもそも、BOMのタップダンスを気にする必要はないでしょう。

66
Charles