最近、学生がLAMP/WAMPを使用しているときにこのようなエンコードエラーに遭遇することがよくあります:
UTF-8 エンコードをエンコードする Web サイト プログラムが正常にインストールされ、正常に実行されました。
B ウェブサイト プログラマ gb2312 も同じサーバーにインストールする必要があります。
問題があります。Apache のデフォルトのエンコーディングである UTF-8 は、Web サイト A を解析する際には問題ありません。しかし、Web サイト B を実行すると、「オタマジャクシ テキスト」が文字化けする問題が発生します。
Apache のデフォルトのエンコーディングを gb2312 に変更するだけで、ウェブサイト A に「オタマジャクシ テキスト」が表示されます。
問題分析:
インターネットで「Apache 設定」を検索すると、検索したほとんどのページで、httpd.conf に次の文を追加するよう提案されます: AddDefaultCharset GB2312。
GB2312 エンコーディングのみを使用する初心者の開発者にとっては、これで問題ありません。ただし、たとえば、UTF-8 文字セットを使用する場合は、test.php ファイルに meta http-equiv="Content-Type" content="text/html; charset=UTF-8" を含める必要があります。
この時点でブラウザを開いて test.php ページにアクセスすると、正しいページが表示されます。しかし、ブラウザが実際にサーバーから返された応答を GB2312 エンコーディングで解釈するとしたら、なぜでしょうか?その理由は、ブラウザーが http 応答メッセージ ヘッダーの Content-type: text/html; charset=GB2312 に基づいて応答の解釈に使用するエンコーディングを決定するためです。つまり、Apache サーバーは引き続き GB2312 エンコーディングを使用してデータを送信します。
そのため、Apache のデフォルトの文字セットが GB2312 に設定されている場合、ページが UTF-8 エンコーディングの使用を宣言していても、Apache サーバーは引き続き GB2312 エンコーディングに従って http 応答を送信します。それは問題ではありません。AddDefaultCharset GB2312 を AddDefaultCharset UTF-8 に変更して、結果がどうなるか見てみましょう。
文字化けしたコードが表示された場合は、それが文字化けしたコードの問題であることもわかります。空白のページが表示された場合は、問題が発生しています。これは他の理由が原因であると考えて、それを確認しない可能性があります。コーディングの観点 問題を解決する方法を検討します。何故ですか?その理由は、PHP ファイル自体が中国語 Windows XP のシステム文字セットを使用してエンコードされているためです。各ファイル ヘッダーには、ファイルのエンコード方法を示すフィールドがあります。 Apache がブラウザからリクエストを受け取ると、PHP にリクエストされたページ (test.php など) を解釈するように依頼します。 PHP は、test.php のエンコード方式が GB2312 であることを認識します (javac を使用して Java ソース ファイルをコンパイルする場合と同様に、コンパイラーはデフォルトでシステム エンコードを使用してソース ファイルの内容を読み取ります。)
ソース ファイルがシステム エンコーディングで保存されていない場合は、コマンド javac -encoding を使用して特定のエンコーディングを指定し、GB2312 エンコーディング形式でデータを Apache に渡すことができます。Apache サーバーは、php から送信されたデータを変更しません。ただし、応答メッセージ ヘッダーの文字セットは次のように設定されます: Content-type: text/html; つまり、GB2312 でエンコードされたデータを渡しますが、ブラウザはそれを UTF-8 でエンコードします。 8. 応答メッセージを解釈します。UTF-8 は 1 文字を表すのに 3 バイトを使用しますが、通常の GB2312 または BIG5 は 2 バイトを使用するためです。上記の理由により、ページを出力すると半分の漢字が > と結合して文字化けしてしまうことがあります。実際に葉が出力されました。 Mozilla、Mozilla Firefox、または Sarafi ブラウザを使用している場合、この問題は発生しませんが、大量の文字化けが発生します。これは、Web ページのエンコードを解析する際の Firefox と IE の戦略が異なるためです。さて、test.phpをUTF-8で保存し、ブラウザでアクセスすると問題ありません。
これを行うと、Apache ディレクトリ内のすべての Web アプリケーションが同じエンコーディングのみを使用するようになります。どうやってするの?
解決策:
まず、AddDefaultCharset off を使用してデフォルトのファイルエンコーディングをオフにすることができます。これにより、Apache サーバーは http 応答メッセージヘッダーに charset を設定せず、ブラウザーが依存する Content-type: text/html のみを設定します。 HTML ファイルに設定されている harset によってエンコーディングが決定されます。次に、スクリプト php.ini ファイルのdefault_charset = "UTF-8" は httpd.conf ファイルと同じ機能を持ち、php がファイルのエンコード方式を自動的に認識できるようにします。
どのエンコード方法を使用しても、test.php の meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8” がテストのエンコード方法と同じである限り、 phpファイルを編集しても文字化けは発生しません。ユーザーが送信したデータのエンコーディング ブラウザーによって送信された文字エンコーディングは、クライアントの文字エンコーディングによって決まります。
たとえば、現在のブラウザのエンコードは Gb2312 ですが、ユーザーがデータを送信した後、Apache によって設定されたエンコード方式が GB2312 か UTF-8 かに関係なく、サーバー側で受信されるデータは依然として Gb2312 でエンコードされたデータです。
ユーザーが送信したばかりのデータを戻りページに表示したい場合、ページは UTF-8 でエンコードされているか、ユーザーが送信したデータはデータベースに保存され、データベースは UTF-8 でエンコードされている場合、その後、文字を変換する必要があります。