ホームページ >バックエンド開発 >PHPチュートリアル >AJAX中国語文字化けPHP完璧解決策(IE、Firefox対応)_PHPチュートリアル
私は最近あるプロジェクトに取り組んでいて、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);
xmlhttp.open("GET",geturl,true);
次に、サーバー側で URL デコードを行います:
;
$ str =iconv("UTF-8","GB2312",$ str); //エンコード変換
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');
JSP:response.setHeader("Charset","GB2312");
Hurryさんのコラムより抜粋
http://www.bkjia.com/PHPjc/478467.html