ホームページ >バックエンド開発 >PHPチュートリアル >AJAX中国語文字化けPHP完璧解決策(IE、Firefox対応)_PHPチュートリアル

AJAX中国語文字化けPHP完璧解決策(IE、Firefox対応)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:47:51973ブラウズ

私は最近あるプロジェクトに取り組んでいて、AJAX の中国語の文字化けの問題に遭遇しました。午後の苦労の末、ついに完全に解決しました。まだ悩んでいる人たちの役に立てば幸いです。この問題に行き詰まり、頭痛がしています。


ご存知のとおり、AJAX を使用して中国語パラメータを送受信する場合、クライアントとサーバーが対応する処理を実行しないと文字化けが発生します。対応する記事はインターネット上に多数ありますが、場合によっては解決が困難です。今日インターネットでたくさん検索しましたが、ほとんどが ASP と JSP (私は PHP を使用しました) に関するもので、結局満足のいく答えが見つかりませんでした。


AJAXにおける中国語の文字化けは大きく分けて2種類あります。 1つ目は中国語のパラメータをサーバーに送信した場合(xmlhttp.open("get|post",url,true))です。 I 今日発生した問題は、IE では正常だったのですが、Firefox では文字化けが発生してしまい、受け取ったパラメータをテキストに出力したところ、問題がなかったので、出力を観察しました。クエリステートメント(データベースからパラメータに関連するものを調べるためにここにいます)で、最終的に問題を発見しました。IEとFirefoxが出力するパラメータは異なります。漢字は同じですが、微妙な違いがあります。前と後ろの接続が異なるため、インターネットで関連情報を検索しましたが、問題を解決できませんでした。しかし、AJAX は UTF-8 エンコーディングを使用してデータを送信するため、いくつかのヒントを得ました。エンコーディング変換はサーバー側で行う必要があります(ここでの私のページはGB2312でエンコードされています。UTF-8が使用されている場合、この手順では問題ありません)。サーバー側でUTF-8をGB2312に変換しました。


$str=iconv("UTF-8","GB2312",$str);


その後、Firefox でテストして問題が解決したと思いましたが、IE でテストしたところ、サーバーが受信したパラメータに問題があることがわかり、落ち込んでしまいました。突然、送信されたメッセージに SetRequestHeader("Content-Type","application/x-www-form-urlencoded"); が設定されており、問題が見つかり、送信された場所でパラメーターがエンコードされています。

geturl=encodeURI(geturl);

geturl=encodeURI(geturl); // geturl=encodeURI(encodeURI(geturl)); と書くこともできます。

xmlhttp.open("GET",geturl,true);

次に、サーバー側で URL デコードを行います:


$str=urldecode($str) //デコード

;
$ str =iconv("UTF-8","GB2312",$ str); //エンコード変換

注: エンコード変換の前にデコードを行う必要があります。そうしないと、正しい値が取得されません


テストを保存すると、IE と Firefox の両方が正常に動作するようになります。


2 番目のタイプは、サーバーがクライアントに中国語を出力するときに文字化けが発生するというものです。この種の問題に対する答えはオンラインにたくさんありますが、それらはすべて解決できます。再度検索する必要がないように、ここにコピーします。


理由: AJAX は、responseText または responseXML の値を受信するときに UTF-8 形式に従ってデコードします。サーバー セグメントによって送信されたデータが UTF-8 形式でない場合、受信した responseText または responseXML の値が文字化けする可能性があります。


解決策:


サーバー上でデータを送信する形式を指定します:

jsp ファイル内:
Response.setContentType("text/text;charset=UTF-8"); // txt テキスト ファイルを返します
または
Response.setContentType("text/xml;charset=UTF-8");//返された XML ファイル

PHP:header('Content-Type:text/html;charset=GB2312');

ASP:Response.Charset("GB2312")

JSP:response.setHeader("Charset","GB2312");

Hurryさんのコラムより抜粋


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

tru​​ehttp://www.bkjia.com/PHPjc/478467.html技術記事最近、あるプロジェクトに取り組んでいたところ、AJAX の中国語文字化けの問題に遭遇しました。午後の苦労の末、ついにこの問題を完全に解決できました。この問題にまだ悩まされている方の参考になれば幸いです。そして頭が痛い…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。