Webサイトのコードが文字化けするApacheのデフォルトエンコードエラーの解決方法については、Apacheエンコーディング_PHPチュートリアル

WBOY
リリース: 2016-07-12 08:59:04
オリジナル
739 人が閲覧しました

ウェブサイトのコードが文字化けするApacheのデフォルトエンコードエラー、Apacheエンコードの解決策について

最近、学生が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 でエンコードされている場合、その後、文字を変換する必要があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1099831.html技術記事 Web サイトが文字化けする Apache デフォルトのエンコード エラーの解決策について、Apache エンコードの学生は、最近 LAMP/WAMP を使用するときにこのようなエンコード エラーに遭遇することがよくあります: Web サイト プログラムのエンコード...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート