ホームページ  >  記事  >  バックエンド開発  >  PHPリクエスト文字化け問題の解決方法

PHPリクエスト文字化け問題の解決方法

藏色散人
藏色散人オリジナル
2020-10-20 09:39:402199ブラウズ

文字化けした php リクエストの解決策: まず、tomcat のserver.xml を開き、要素の属性「URIEncoding="UTF-8"」を設定します。

PHPリクエスト文字化け問題の解決方法

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

リクエスト、レスポンス中国語文字化けの問題と解決策

リクエストの文字化けコードとは、ブラウザからサーバーに送信されたリクエスト パラメータに中国語の文字が含まれており、サーバーが取得したリクエスト パラメータの値が文字化けしている、

レスポンスのコードが文字化けしていることを指します。サーバーからブラウザに送信されたデータに漢字が含まれており、ブラウザで文字化けが表示される;

文字化けの原因: リクエストコードの文字化けか、応答のコードが文字化けします。実際にはクライアントが原因です。これは、ブラウザとサーバーで使用されるエンコード形式の不一致によって引き起こされます。文字化けしたリクエストを例に挙げると、ブラウザはリクエストをサーバーに送信します。ブラウザとサーバー間の通信は基本的にソケット ストリームであるため、リクエスト パラメータ (文字) を最初にバイトに変換する必要があります。これがエンコード プロセスです。サーバーはリクエスト パラメータを受信し、デコードされて (バイトが文字に変換され)、リクエスト オブジェクトにカプセル化されます。クライアントのエンコードがサーバーのデコードと一致しない場合、リクエストを通じて取得されたリクエスト パラメータの値が文字化けします。

解決策:

1. レスポンスの文字化けコード

サーバーからブラウザに送信されるデータは、ISO-8859-1 に従ってエンコードされています。データ受信後、デフォルトの文字セットでデコードして表示しますが、ブラウザのデフォルトのデコード文字セットがISO-8859-1以外の場合、文字化けが発生します。

応答が文字化けする場合は、サーバー側でエンコード文字セットを指定し、この文字セットに従ってデコードするようにブラウザに通知するだけです。 3 つの方法があります:

1. A. サーバー側エンコーディングを設定します

response.setCharacterEncoding("utf-8");

デフォルトは ISO-8859 です。 -1; メソッドは、response.getWriter()

B より前に設定する必要があります。サーバーから送信されたデータ形式をブラウザーに通知します。

response.setHeader("contentType", "text/ html; charset=utf- 8”);

2. A. サーバーから送信されたデータ形式をブラウザに通知します

response.setContentType("text/html;charset=utf- 8”);

response.setHeader("contentType", "text/html; charset=utf-8"); と同等ですが、実際には、response.setCharacterEncoding("utf-8") をオーバーライドします。

B を設定するだけです。サーバー側のエンコーディングを設定します

response.setContentType("text/html;charset=utf-8");

3 A. サーバー側のエンコーディングを設定します

response.setCharacterEncoding("utf-8");

B. ブラウザはデコードに utf-8 を使用します

概要: 設定:

A、サーバー側のエンコーディングを設定します

response.setCharacterEncoding("utf-8");

B. ブラウザに通知します。サーバーによって送信されたデータ形式の

response.setContentType("text /html;charset=utf-8");

C。ブラウザはデコードに utf-8 を使用します

念のためこのように設定しました;

2. 文字化けリクエスト

ブラウザからアクセスする方法は3つあります。アドレス バーの URL にアクセスし、ページ内のハイパーリンクをクリックしてアクセスし、フォームを送信してアクセスします。最初のアクセス方法のブラウザはデフォルトで UTF-8 に従ってパラメータをエンコードし、後の 2 つのアクセス方法のブラウザは現在のページの表示エンコードに従ってパラメータをエンコードします。したがって、リクエストの文字化けに対しては、サーバー側で対応するデコード形式を設定するだけで済みます。アクセス方法が異なるため、ブラウザのパラメータのエンコーディング形式も異なります。処理を容易にするために、ハイパーリンクやフォームを介したアクセスも UTF-8 形式である必要があります。つまり、現在のページを表示するためのエンコーディングも UTF-8 形式を使用する必要があります。 8 なので参照 プロセッサは一律に UTF-8 を使用してパラメータをエンコードします。

A. 投稿メソッド

投稿メソッドはフォーム送信に属し、パラメーターはリクエスト本文に存在します。

request.setCharacterEncoding("utf-8")

B. get メソッド

get メソッドによって送信されるパラメータは、リクエスト ラインの URI に従い、サーバーはISO-8859-1 をデコードします。現時点では、コード化けを解決するには 2 つの方法があります:

方法 1: サーバー側で uri パラメータのデフォルトのエンコーディングを変更する

tomcat の server.xml で、要素の属性 URIEncoding="UTF-8" を設定するだけです。 (この属性はデフォルトでは設定されていません)

例: 注: 1. 要素の属性 useBodyEncodingForURI="true" を設定します。これは、リクエスト本文と URI が同じエンコード形式を使用することを意味します。この 2 つの属性を設定することで、get メソッドのコード化けと post メソッドのコード化けの両方を解決できます。 2.server.xml を変更して、サーバーが GET および POST を UTF-8 に従ってデコードするように指定します。Tomcat によって管理されるすべての Web アプリケーションは、UTF-8 エンコードを使用する必要があります。つまり、すべての JSP および HTML ページは UTF-8 エンコードを使用します。 。

以上がPHPリクエスト文字化け問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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