ホームページ  >  記事  >  バックエンド開発  >  文字化けした Ajax ページと文字化けした get post_PHP チュートリアルの解決策

文字化けした Ajax ページと文字化けした get post_PHP チュートリアルの解決策

WBOY
WBOYオリジナル
2016-07-13 10:55:01879ブラウズ

Ajaxページの文字化けとget postの文字化けの解決策
以前、ASP ページでは、ページを更新すると、コードが文字化けしたり、リンクが文字化けしたりすることがありましたが、Add <% @ CODEPAGE = "65001" で解決策を見つけました。 " LANGUAGE = before all ASP Pages. "VBSCRIPT" %> <% Response.CODEPAGE = 65001%> 、65001 は UTF-8 エンコード形式を指します。GB2312 は 936 です。その理由は、他のプログラムが Response を宣言していないためです。 UTF-8 ページに入ると、Session.CodePage にすぐに値が割り当てられ (65001 または 936 はバージョンに応じて異なる値が割り当てられます)、別のページに入ると、すぐに他のページの Response.CodePage に値が割り当てられます。 Session.CodePage で値が割り当てられているので、そのページが @ CODEPAGE = 936 になった場合、ページの Response.CodePage に 65001 の値が割り当てられている場合は確実に文字化けしますので、ページの先頭に統一してコードを記述します。

そして、昨夜、AJAXが中国語を返すと文字化けが表示され、2つのページのエンコードが同じUTF-8であるのに、なぜ文字化けが発生するのかという問題に遭遇しました。 AJAX 処理ページ、< % Response.Charset = "UTF-8"%> を追加すると、結果ページに内容が表示されません。これは、おそらくデータベース チュートリアルのデータ エンコーディングの問題です。データのエンコードは、データを書き込むときのエンコードに基づいています。GB2312 です。現在、UTF-8 形式のエンコードとデコードを使用すると、必ず文字化けが発生します。<% Response.Charset を設定するとどうすればよいですか。 = "GB2312" %> すると、AJAX 中国語が通常に戻ります。ここでは、W3C の Charset 属性について説明します。文字セット名は、ページの Response オブジェクトの content-type ヘッダーに追加されます。

<% Response.Charset = "GB2312"%> を追加します

ページ出力表示

<%content-type:text/html>

文字化けしないように、GB2312でエンコードされたデータを受け入れることができるように、Charsetが文字セットをGB2312に変更したのだと思います

文字化けを取得して投稿するためのajaxソリューションを見てみましょう

プログラムの実行に関して、データの文字化けには 2 つのタイプがあります。1 つは、xmlHTTP が Web ページの特殊効果のワードプロセッサのメカニズムに従い、UTF-8 エンコーディングを使用するため、バックグラウンド プログラム自体に送信される中国語のテキストが文字化けすることです。ただし、背景ページが GB2312 などのエンコーディングを使用している場合、受信データは当然文字化けします。また、データの送受信時に文字化けが発生するという問題もあります。これは、背景ページで使用されるエンコーディングと Javascript エンコーディングの違いによっても発生します。サーバー スクリプトによって返される文字には、デフォルトで GB2312 などのサーバー エンコーディングが使用されます。サーバーから送り返されるデータが文字化けする問題は、サーバーからデータが送り返されるページにエンコーディングを定義するファイル ヘッダーを追加するだけで簡単に解決できます。
ファイルヘッダー情報を定義する場合、スクリプトに応じて次の方法を使用できます:
PHP:header("Content-Type:text/html;charset=GB2312"); ASP:Response.Charset("GB2312")
JSP:response.setHeader("文字セット","GB2312"); (他のスクリプトは関連するクラス ライブラリを検索でき、通常はヘッダー情報を設定するための関数またはメソッドがあります。)
メッセージの返信について話した後、文字化けしたメッセージを送信する問題について話しましょう。実際、エンコードに関係なく、入力した中国語の文字は UTF-8 形式でサーバーに正しく送信されますが、サーバーがそれを受信すると、期待どおりにはデコードされず、サーバーのデフォルトの文字が使用されます。エンコード方式。通常は GB2312 で情報をデコードします。そうすれば、私たちが目にする文字は当然間違っています。
XMLHTTP には 2 つのデータ送信方法があることは誰もが知っています。1 つは GET で、もう 1 つは POST です。 GET のコード化けは比較的簡単に解決できます。エンコーディングを定義するヘッダー情報を追加するだけです: setrequestheader("Content-Type", "text/html; encoding=gb2312")。このようにして、GET モードで送信されたデータは、サーバー スクリプトによって GB2312 モードとして正しく理解され、デコードされます。
さらに難しいのは、POST メソッドを使用してデータを送信する場合です。POST データで使用される Content-type が次のとおりであるため、上記のメソッドは無効です。 xmlObj.setrequestheader("Content-Type","application/x-www-form - urlencoded"); 文字エンコーディングが定義されていません。この問題を解決するのに非常に困難に直面しましたが、これまでのところ 2 つのより良い解決策を見つけました。 1 つ目は、中国語の文字をサーバーに送信する前に URL エンコードすることです。つまり、encodeURI() を使用します。
ただし、このメソッドは 2 回使用する必要があることに注意してください。1 回目は文字を URL エンコードに処理するためです。 2回目は、エンコードされたデータを再度エンコードします。これは、エンコードが初めて送信された場合、サーバーが自動的にデコードするため、必要なデコード方法を制御する方法がありません。したがって、encodeURL を 2 回実行する必要があります。この目的は、サーバー側で取得するデータが encodedURL の後の文字列であることです。次に、サーバー側スクリプトの対応するデコード関数を使用して文字列を復元し、必要な正しい文字列を取得します。この欠点は、送信するデータ量を飛躍的に増加させなければならないことです。データの量が増えると、エラーの可能性も高まります。
もう 1 つの方法は、Cookie を使用してデータをダンプすることです。これによりデータは増加しませんが、ブラウザーの特定の権限が必要になります。ただし、Cookie の読み書きは非常に簡単です。しかし、この操作は理想的ではないと思います。試してみないと何とも言えません。そして、文字化けの問題を解決するための3番目の方法が必要だと思います。

PHPのAJAX POST文字化けを解決!

高度でもハンサムでもありませんが、最終的に問題は解決されました。この問題の解決策は、公式には PHP の完全な関数ライブラリによるものです。 iconv()関数ひとつで文字化け問題が解決!

クライアント側では設定は必要ありません。通常の値を取得し、xmlHTTP を使用してサーバー側に送信し、サーバー側で通常どおり値を受け入れます。値を受け取った後、iconv() 関数を使用して文字列を再エンコードするだけです。
$R_Guest = strval(iconv("UTF-8","GB2312",$_POST["R_Guest"])); $R_Content = strval(iconv("UTF-8","GB2312",$_POST["R_Content"]));


http://www.bkjia.com/PHPjc/632279.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632279.html技術記事 Ajaxページの文字化けとポストの文字化けの解決策 以前、ASPのページが文字化けしたり、リンクが文字化けしたりすることがありましたが、昨晩義母に聞いてみました。すべての ASP ページで使用できるソリューションです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。