まえがき
#PHP を使用しているときに、fwrite を使用するか file_put_contents Write を使用するかにかかわらず、生成されたファイルが文字化けしていることに遭遇したことがある人は多いと思います。最初にエンコードして解決しようとするかもしれませんが、たとえ UTF-8 エンコードに変換したとしても、最終結果は理想的ではないことがよくあります...
それでは、根本的な原因は何でしょうか? ?
一文: ヘッド BOM の欠如 (もちろん、これは J の BOM を指すわけではありません)
BOM
BOM というと、この人のことをよく知らない学生もいるかもしれないので、ここで簡単に説明します。ベテランの方は読み飛ばしていただいても構いません。 Windows でメモ帳などのプログラムを使用してテキスト ファイルを UTF-8 形式で保存すると、メモ帳はファイル ヘッダーの前にいくつかの非表示文字 (EF BB BF) を追加します。これはいわゆる BOM (バイト オーダー) です。マーク)。 )。
は、ファイルの冒頭に「EF BB BF」といういくつかの非表示文字が含まれている限り、メモ帳に保存されたファイルに限定されません (16 進数は xEFxBBxBF である必要があり、バイナリでファイルを編集するときに表示されます)。これは規約のようなもので、システムはこれを認識すると、ファイルが UTF-8 でエンコードされていると判断します。
ファイルに BOM がない場合、ユーザーに提示するファイルが文字化けする可能性があるのはこのためです。
PS: 実際、BOM は、HTML の charset 属性と XML のエンコーディング属性として理解でき、これらは識別子として機能します。
解決策
では、PHP で BOM を出力するにはどうすればよいですか?
答えは、すべてのコンテンツが出力される前に出力することです。
print(chr(0xEF).chr(0xBB).chr(0xBF));
もちろん、ファイルを生成している場合は、次の 2 つが存在する可能性があります:
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF));
file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF));
推奨チュートリアル:
PHP ビデオ チュートリアル
以上がphpでtxtの文字化けが発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。