#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。 PHP での GET 中国語パラメーターの文字化けコード受信に関する詳細な調査PHP が文字化けした取得パラメータを取得するための解決策: 1. "$str=iconv("gb2312","utf-8",$str);"; を通じてエンコーディングを処理します。 2. "mb_convert_encoding($ str,"utf-8", "gb2312");" メソッド。
多くの PHPer がこのような問題に遭遇すると思います。 utf-8 のページで、test.php?s= のような中国語パラメータを指定したアドレスに直接アクセスすると、 test このようなアドレス出力パラメーターの値が文字化けします。検索エンジンで関連情報を検索したところ、いくつかの解決策が示されただけで、この問題の原因を誰も研究していませんでした。今日は、この記事では、この問題の原因を詳しく説明します。理由:
最初にこの問題を示します。テスト コードと実行結果は次のとおりです。
コード:
テスト結果:
コードは、応答コンテンツのエンコーディングが であることを宣言します。 utf-8、表示された内容は確かに文字化けしています。
var_dump出力変数の長さは # のみです。 ##4 、明らかに、2 つの漢字の長さは、utf-8 の下で 4 以上である必要があります。 エンコードバイト
次に、
Firefox を見てみましょう。このページへのアクセスurl
##FireFox
は中国語のurl を自動的にエンコードするため、テストは ���� になることがわかります。 ##、非常に明らかに、ここでの 1 つの単語は 2 バイトであり、# ではなく、gb2313、gbk などの中国語のエンコード形式です。 ##utf-8エンコーディング。 (推奨: 「PHP ビデオ チュートリアル 」)
ページのエンコーディングを ## に切り替えた場合#gbk
、中国語パラメータは通常どおり表示されます。下の図を参照してください。
この時点で、興味深い疑問が生じます。emlog の中国語ラベルのようなパラメータを文字化けしないようにするにはどうすればよいでしょうか。キャラクター?
複数のテストの後、小さな違いが見つかりました:
emlog中国語パラメータへのリンクがページ上に生成されます。上記のテストでは、手動でアドレス バーに直接入力しました。
直接入力する場合、例えば
http://be-evil.org/?tag=originalそのようなリンクの場合、プログラムはタグが見つからないというメッセージも表示します
テストコードは次のとおりです:
# #テスト結果、通常の表示:
上の図の赤いボックスでマークされた
urlコードに注意してください。このテストの 2 文字は で構成されています。これは、前の 2 バイトではなく 6 バイトで構成されており、中国語のパラメータが正しく utf-8 エンコーディングになりました。
それでは、この問題の原因は何でしょうか?
答えはブラウザのデフォルトのエンコーディングです
私たちは問題を起こしています、私たちは皆中国のシステムを使用しています、ブラウザのデフォルトのエンコーディングエンコーディングはローカライズに合わせて設定されます。たとえば、IE と FireFox のデフォルトのエンコーディングを独自に設定します。コンピュータは gb シリーズについては、以下の図を参照してください:
IE ###### デフォルト設定: ############################## ###########
Firefox のデフォルト設定:
##
この設定により、ユーザーが入力した url を要求する場合、ブラウザはデフォルトで url を使用します。中国語はページのエンコード形式ではなくデフォルトのエンコード形式で送信されるため、ページ内の中国語を含むリンクは正常ですが、手動で入力したリンクは文字化けします。同様に、ブラウザのデフォルトのエンコードを utf-8 に調整すると、url の中国語は次のようになります。 utf-8エンコーディング。
上記に加えて、次のような状況でもこの問題が発生します:
gbk エンコードされたページによって生成されたアドレスが utf-8 にリンクしている場合 のページ、gbk ページの中国語は gbk の形式でエンコードされ、次のページに送信されます, すると utf-8エンコード受信後に必ず文字化けが発生します。
IIS#urlモジュールを書き換えて、中国語で書かれたエンコードも gbk です。ページが utf-8 でエンコードされている場合、書き換えパラメータは無効になります。
このような場合、php の組み込みトランスコーディング機能を使用する必要があります。 ## エンコードの問題に対処しましょう:
解決策1:
$str =iconv("gb2312","utf-8",$str);
## スキーム2:
mb_convert_encoding($ str, "utf-8", "gb2312");
この記事が、頭を悩ませている人々の助けになれば幸いです。エンコードの問題 PHPer 私たちは役に立ちます :)
以上がPHP で取得パラメータが文字化けした場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。