PHP を使用しているときに、fwrite または file_put_contents を使用して記述されたかどうかに関係なく、ファイルの文字化けに遭遇したことがある人は多いと思います。最初にエンコードして解決しようとするかもしれませんが、たとえ UTF-8 エンコードに変換したとしても、最終結果は理想的ではないことがよくあります...
それでは、根本的な原因は何でしょうか? ?ヘッド BOM が欠けているだけです (もちろん、これは Js 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 サイトの他の関連記事を参照してください。