ホームページ >バックエンド開発 >PHPの問題 >phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?

phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2020-08-24 09:34:594172ブラウズ

php get request 中国語文字化けの解決策: 1. [$name = iconv("gbk","utf-8",$name);] メソッドを使用して、文字化けしたコードを解決します。 2. [mb_convert_encoding( $ name, "utf-8", "gbk");] メソッド。

phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?

推奨: 「PHP ビデオ チュートリアル

php は、GET によって渡された文字化けした中国語パラメータを受け取りますメソッド

最近、簡単なページを作成し、ブラウザから中国語のパラメータ (test.php?name=test) を渡したところ、utf-8 のページをどのように設定しても文字化けして表示されました。ググってみたら解決策はたくさん出てきましたが、何が原因なのでしょうか?この問題を深く研究した人は誰もいません。好奇心から、何が原因なのか調べてみました。経験も積めると思います。

まず、簡単なテスト コードを見てみましょう:

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>

テスト結果は次のとおりです:

phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?

コードは、応答コンテンツのエンコーディングが utf-8 であることを示しており、表示内容は確かに文字化けしています。 var_dump によって出力される変数の長さは 4 だけであることに注意してください。明らかに、utf-8 エンコードでは 2 つの漢字の長さは 4 バイト以上でなければなりません。次に、これにアクセスするための Firefox の URL を見てみましょう。ページ

phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?

# #FireFox は自動的に中国語の URL エンコードを行うので、テストが����になることがわかります。明らかに、ここでの 1 ワードは 2 バイトであり、これは utf-8 エンコードではなく、gb2313、gbk などの中国語のエンコード形式です。ページのエンコードを gbk に切り替えると、中国語のパラメーターが通常どおり表示されます。下の図を参照してください。

phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?

次に別のテストを実行します。コードは次のとおりです:

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>   
  

テスト結果、通常の表示: ## ### # ###### ###### ###### ###### ############### ######それで、何ですか? この問題が発生する原因は何ですか?

答えは、ブラウザのデフォルトのエンコーディングが問題を引き起こしているということです。私たちは皆中国語システムを使用しているため、ブラウザのデフォルトのエンコーディングは当然ローカライズに設定されます。たとえば、IE と IE のデフォルトのエンコーディングは、自分のパソコンのFireFoxはどちらもgbシリーズです。

ブラウザは、ユーザーが入力した URL をリクエストすると、ページのエンコード形式ではなく、デフォルトのエンコード形式で URL 内の中国語を送信します。これが、ページ内の中国語を含むリンクが表示される理由です。 Normal and we 手入力したリンク

が文字化けする原因。同様に、ブラウザのデフォルトのエンコードを utf-8 に調整すると、入力 URL 内の中国語は utf-8 でエンコードされます。

上記に加えて、この状況は次の状況でも発生します。

gbk でエンコードされたページによって生成されたアドレスが utf-8 ページにリンクされている場合、 gbkページはgbkのエンコーディングを次のページに転送するフォーマットに準拠しているため、utf-8エンコーディングを受信すると必ず文字化けが発生します。

IIS の URL 書き換えモジュール、書き換えられた中国語エンコードも gbk です。ページが utf-8 エンコードの場合、書き換えパラメータは無効になります。このような場合、PHP の組み込みトランスコーディング関数を使用してエンコーディングの問題に対処する必要があります。

phpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?オプション 1:

$name = iconv("gbk","utf-8",$name);

オプション 2:

mb_convert_encoding($name, "utf-8", "gbk");

以上がphpのgetリクエストで中国語の文字化けが発生した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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