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 に変換します。
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; ながら(++ik=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=[];iutf8.join('');
を返します }
a(0);
スクリプト>