ホームページ  >  記事  >  バックエンド開発  >  PHP で取得パラメータが文字化けした場合はどうすればよいですか?

PHP で取得パラメータが文字化けした場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2021-02-23 09:40:231899ブラウズ

PHP が文字化けした取得パラメータを取得するための解決策: 1. "$str=iconv("gb2312","utf-8",$str);"; を通じてエンコーディングを処理します。 2. "mb_convert_encoding($ str,"utf-8", "gb2312");" メソッド。

PHP で取得パラメータが文字化けした場合はどうすればよいですか?

#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。

PHP での GET 中国語パラメーターの文字化けコード受信に関する詳細な調査

多くの PHPer がこのような問題に遭遇すると思います。 utf-8 のページで、test.php?s= のような中国語パラメータを指定したアドレスに直接アクセスすると、 test このようなアドレス出力パラメーターの値が文字化けします。検索エンジンで関連情報を検索したところ、いくつかの解決策が示されただけで、この問題の原因を誰も研究していませんでした。今日は、この記事では、この問題の原因を詳しく説明します。理由:

最初にこの問題を示します。テスト コードと実行結果は次のとおりです。

コード:

PHP で取得パラメータが文字化けした場合はどうすればよいですか?

テスト結果:

PHP で取得パラメータが文字化けした場合はどうすればよいですか?

コードは、応答コンテンツのエンコーディングが であることを宣言します。 utf-8、表示された内容は確かに文字化けしています。


#ここで注意してください。

var_dump出力変数の長さは # のみです。 ##4 、明らかに、2 つの漢字の長さは、utf-8 の下で 4 以上である必要があります。 エンコードバイト

次に、

Firefox を見てみましょう。このページへのアクセスurl

PHP で取得パラメータが文字化けした場合はどうすればよいですか? ##FireFox

は中国語の

url を自動的にエンコードするため、テストは ���� になることがわかります。 ##、非常に明らかに、ここでの 1 つの単語は 2 バイトであり、# ではなく、gb2313gbk などの中国語のエンコード形式です。 ##utf-8エンコーディング。 (推奨: 「PHP ビデオ チュートリアル 」)

ページのエンコーディングを ## に切り替えた場合#gbk

、中国語パラメータは通常どおり表示されます。下の図を参照してください。

この時点で、興味深い疑問が生じます。emlog の中国語ラベルのようなパラメータを文字化けしないようにするにはどうすればよいでしょうか。キャラクター?

複数のテストの後、小さな違いが見つかりました:

emlog中国語パラメータへのリンクがページ上に生成されます。上記のテストでは、手動でアドレス バーに直接入力しました。

直接入力する場合、例えば

http://be-evil.org/?tag=originalそのようなリンクの場合、プログラムはタグが見つからないというメッセージも表示します

テストコードは次のとおりです:


PHP で取得パラメータが文字化けした場合はどうすればよいですか?

# #テスト結果、通常の表示:


PHP で取得パラメータが文字化けした場合はどうすればよいですか?

上の図の赤いボックスでマークされた

url

コードに注意してください。このテストの 2 文字は で構成されています。これは、前の 2 バイトではなく 6 バイトで構成されており、中国語のパラメータが正しく utf-8 エンコーディングになりました。

それでは、この問題の原因は何でしょうか?

答えはブラウザのデフォルトのエンコーディングです

私たちは問題を起こしています、私たちは皆中国のシステムを使用しています、ブラウザのデフォルトのエンコーディングエンコーディングはローカライズに合わせて設定されます。たとえば、

IEFireFox のデフォルトのエンコーディングを独自に設定します。コンピュータは gb シリーズについては、以下の図を参照してください:

IE ###### デフォルト設定: ############################## ###########

Firefox のデフォルト設定:


PHP で取得パラメータが文字化けした場合はどうすればよいですか?

##

この設定により、ユーザーが入力した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。