25

utf8_encode を使用するときに PHP に BOM を追加させるにはどうすればよいですか?

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

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

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

4

1 に答える 1

76

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

UTF-8 BOMはのようですので、 UTF-8 に変換した0xEF 0xBB 0xBFに文字列に付けることができます。

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

ただし、気をつけてください。 utf8_encodeISO-8859-1 文字列が必要です。XML を使用している場合は、XMLがまだ UTF-8 でエンコードされていないことを確認してください。ドキュメントのコメントは、関数がさまざまな楽しい方法で壊れていることを示唆しているため、必要であることがわかっていない限り、放り投げるべきではありません。

PHP の文字列は単純に愚かで、知らないバイトであることを思い出してください。それらには文字セットが関連付けられていないため、文字列内のデータが既に UTF-8 である場合は、変換を実行する必要はありません。

また、リンクされたウィキペディアの記事には次のように書かれています。

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

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

于 2011-04-09T00:26:52.493 に答える