ホームページ  >  記事  >  バックエンド開発  >  PHPのURLパラメータで漢字が文字化けする原因と解決策【まとめ】

PHPのURLパラメータで漢字が文字化けする原因と解決策【まとめ】

PHPz
PHPzオリジナル
2023-03-21 11:10:312322ブラウズ

PHP は、Web アプリケーションや動的な Web ページの作成に使用できる、広く使用されている開発言語です。しかし、PHP を使用するとさまざまな問題に遭遇することがありますが、最も困難な問題の 1 つは、URL 内の中国語パラメータが文字化けする問題です。この記事では、この問題の根本原因とその解決方法を探っていきます。

URL の中国語パラメーターが文字化けする問題の理由

HTTP プロトコルでは、URL はプロトコル、ホスト名、ファイル パスなどの複数の部分で構成されます。クエリ文字列などURL に中国語の文字が含まれている場合、サーバーやブラウザが正しく解釈できるように、これらの文字をエンコードする必要があります。このエンコード変換にはURLエンコードと呼ばれる手法が使用されます。 URL エンコードは、英数字以外のすべての文字をパーセント記号 (%) の後に 2 つの 16 進数が続く形式に変換します。

たとえば、漢字「安」は、UTF-8 エンコードでは「E5 AE 89」と表されます。 URL エンコードされると、「an」になります。ブラウザはこのエンコーディングをサーバーに送信し、クエリ文字列で元の中国語の文字「安」の代わりに「安」を渡すようにサーバーに指示します。

ただし、PHP コードが URL に渡された中国語パラメータを取得しようとすると、パラメータが正しく解析されず、文字化けが発生する可能性があります。これは、PHP が GET リクエストのパラメータを解析するためにデフォルトで ISO-8859-1 文字セットを使用するためです。 UTF-8 エンコード形式の中国語の文字は ISO-8859-1 文字セットに存在しないため、PHP はそれらを解析して文字化けします。

URL の中国語パラメータ文字化けの問題を解決する方法

URL の中国語パラメータ文字化けの問題を解決するには、URL のエンコード方法を知る必要があります。パラメータを取得し、PHP エンコード形式で認識できるものに変換します。以下に 2 つの方法があります。

方法 1: 手動変換

自分でエンコードを手動で変換することは、この問題を解決する最も簡単な方法の 1 つです。エンコード変換には PHP の組み込み関数を使用できます。たとえば、上記の漢字「安」の場合、次のコードを使用して、UTF-8 エンコード形式から ISO-8859-1 エンコード形式に変換できます。

$url_param = '%E5%AE%89';
$decoded_param = urldecode($url_param);
$encoded_param = mb_convert_encoding($decoded_param, 'ISO-8859-1', 'UTF-8');
echo $encoded_param; // 输出:安

このコードでは、まず、 urldecode() 関数を使用して、URL エンコードされたパラメータを通常のテキストに変換します。次に、mb_convert_encoding() 関数を使用してテキストを UTF-8 エンコーディングから ISO-8859-1 エンコーディングに変換し、結果を $encoded_pa​​ram 変数に保存します。

方法 2: サーバー構成を変更する

エンコード変換を手動で実行したくない場合は、URL パラメーターを UTF から自動的に変換するようにサーバー構成を変更することもできます。 -8 エンコード形式 ISO-8859-1 エンコード形式です。 Apache サーバーでは、.htaccess ファイルを変更することで、Web ルート ディレクトリでこれを実現できます。次の行を .htaccess ファイルに追加します。

AddDefaultCharset ISO-8859-1
php_value default_charset "iso-8859-1"

これにより、リクエストを解析するときに ISO-8859-1 エンコード形式を使用し、このエンコード形式を PHP に渡すように Apache に指示します。これにより、PHP は GET を正しく解析できるようになります。で中国語パラメータを要求します。

結論

この記事では、URL 内の中国語パラメータが文字化けする問題の根本原因を調査し、2 つの解決策を紹介しました。 URL パラメータのエンコード形式を手動で変換するのは面倒に感じることもありますが、これが最も簡単で信頼性の高い解決策です。一方、サーバー構成を変更すると、URL パラメーターを UTF-8 エンコード形式から ISO-8859-1 エンコード形式に自動的に変換できますが、これには対応するサーバー構成と権限が必要です。どの方法を使用しても、URL エンコードと PHP エンコードの知識を十分に理解していれば、URL 内の中国語パラメータの文字化けの問題を解決し、Web アプリケーションを正常に実行できるようになります。

以上がPHPのURLパラメータで漢字が文字化けする原因と解決策【まとめ】の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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