文字化けした php リクエストの解決策: まず、tomcat のserver.xml を開き、要素の属性「URIEncoding="UTF-8"」を設定します。
推奨: 「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 サイトの他の関連記事を参照してください。