PHP は、Web アプリケーションや動的な Web ページの作成に使用できる、広く使用されている開発言語です。しかし、PHP を使用するとさまざまな問題に遭遇することがありますが、最も困難な問題の 1 つは、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 のエンコード方法を知る必要があります。パラメータを取得し、PHP エンコード形式で認識できるものに変換します。以下に 2 つの方法があります。
自分でエンコードを手動で変換することは、この問題を解決する最も簡単な方法の 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_param 変数に保存します。
エンコード変換を手動で実行したくない場合は、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 サイトの他の関連記事を参照してください。