ホームページ  >  記事  >  バックエンド開発  >  phpの中国語文字化け問題の解決策 ajax interaction_PHPチュートリアル

phpの中国語文字化け問題の解決策 ajax interaction_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 16:54:47813ブラウズ

ajax は utf-8 形式のみをサポートし、gb2312 エンコード形式をサポートできないため、ajax を使用して gb2312 エンコード プログラムを使用すると文字化けがよく発生します。解決策を見つけました。 サーバーから送信されるデータは依然として gb2312 でエンコードされており、クライアントは js を使用して漢字を utf8 エンコードに変換し、ページに表示します。

ajax は utf-8 形式のみをサポートし、gb2312 エンコード形式をサポートできないため、ajax を使用して gb2312 エンコード プログラムを使用すると文字化けが頻繁に発生します。

解決​​策を見つけました。

サーバーによって送信されるデータは依然としてgb2312でエンコードされており、クライアントはjsを使用して漢字をutf8エンコードに変換し、ページに表示します

方法1 json
1. サーバー側の JSON データは、PHP チュートリアルの iconv 関数を使用して変換されます: iconv('gb2312', 'utf8', "変換された文字列はブラウザーに出力されます"); クライアントは utf8 データを取得し、それを gb2312 に変換します。

関数 gb2utf8(data){//gb エンコーディングは、つまり、バイナリ コード utf8->gbk を通じて中国語に変換します
var glbencode = []; gb2utf8_data = データ; execscript("gb2utf8_data = midb(gb2utf8_data, 1)", "vbscript"); var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g|>,"%$2%$1").replace (/%([a-z].)%(.{2})/g|>,"@$1$2"); t=t.split("@"); var i=0,j=t.length,k; ながら(++i k=t.substring(0,4); if(!glbencode[k]) { gb2utf8_char = eval("0x"+k); execscript("gb2utf8_char = chr(gb2utf8_char)", "vbscript"); glbencode[k]=escape(gb2utf8_char).substring(1,6);                                                                           。 }
gb2utf8_data = gb2utf8_char = null; unescape(t.join("%")) を返します。 }

2 番目、header("content-type", "application/x-www-form-urlencoded; charset=gbk"); // 出力ヘッダー、gbk エンコーディングに設定

3 番目に、Ajax でデータをリクエストする前に上記のメソッドを呼び出して、リクエストで使用される文字セットを指定します: xmlhttp.setrequestheader( "content-type", "application/x-www-form-urlencoded;charset=gbk");


オプション 2
search.php

header("コンテンツタイプ: text/html; charset=gb2312");
'./search.htm' を含めます;
?>

search.htm



<頭>

高度な検索


高度な検索


<フォームメソッド="ポスト"アクション="">
学校の種類:
<名前=「学校タイプ」を選択>




学校名:
<名前="sid" id="sid"を選択>



<スクリプト タイプ="テキスト/ウェブページの特殊効果">
関数 ajax(設定) {
var xhr = window.activexobject ? new activexobject("microsoft.xmlhttp") : new xmlhttprequest()、成功 = false;
xhr.open(設定.タイプ, 設定.url);
If(settings.type == 'post')
xhr.setrequestheader('content-type', 'application/x-www-form-urlencoded');
xhr.send((!settings.cache ? 'time=' + new date().gettime() + '&' : '') + settings.data);
設定.loader();
settimeout(function() {
if(!successed) {
alert('リクエストタイムアウト!');
xhr.abort();
}
}, settings.timeout);
xhr.onreadystatechange = function() {
If (xhr.readystate == 4 && xhr.status == 200) {
settings.callback(xhr.responsetext.replace(/(^s*)|(s*$)/g, ""));
}
成功 = true;
}
}
関数 a(t) {
ajax({
タイプ: '投稿'、
URL: 'ajax.php',
データ: 'schooltype=' + t,
タイムアウト: 8000、
キャッシュ: true、
ローダー: function() {},
コールバック: function(d) {
var arr = eval(d);
If(typeof(arr) == 'オブジェクト') {
var obj、オプション;
Document.getelementbyid('sid').innerhtml = '';
for(var i = 0; obj = arr; i ++) {
オプション = document.createelement('オプション');
option.value = obj[0];
option.innerhtml = txt2utf8(obj[1], '');
Document.getelementbyid('sid').appendchild(オプション);
}
}
}
})
}
関数 txt2utf8(文字列, プレフィックス){
for(var i=0,utf8=[];i utf8.join('');
を返します }
a(0);


ajax.php
header("コンテンツタイプ: text/html; charset=gb2312");
$schooltype = !empty($_post['schooltype']) $_post['schooltype'] : 0;
スイッチ($schooltype) {
ケース0:
echo "[['40', '太平渓町花里宝小学校'],['41', '太平渓町長陵黒竜江希望小学校'],['42', '楽天渓町中学校'], [' 43'、'楽天渓鎮蓮陀中学校']]";
休憩;
ケース 1:
echo "[['40', '太平渓鎮花利宝小学校'],['41', '黒竜江省長陵太平渓鎮ホープ小学校']]";
休憩;
ケース 2:
echo "[['42', 'ロッテクリークタウン中学校'],['43', 'ロッテクリークタウン蓮多中学校']]";
休憩;
デフォルト:
休憩;
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631734.html技術記事 Ajax は utf-8 形式のみをサポートし、gb2312 エンコード形式をサポートできないため、ajax を使用すると gb2312 でエンコードされたプログラムが文字化けして表示されることがよくあります。サーバー側の送信という解決策を見つけました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。