濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文

編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文

熱門(mén)標(biāo)簽:如何用地圖標(biāo)注各分公司 電銷(xiāo)機(jī)器人適用范圍 接聽(tīng)電話機(jī)器人哪有 蓄意標(biāo)記地圖標(biāo)注 信貸電銷(xiāo)機(jī)器人有用嗎 莆田防封電銷(xiāo)卡價(jià)格 廣西ai語(yǔ)音電銷(xiāo)機(jī)器人哪家好 察縣地圖標(biāo)注 辦理一個(gè)400電話多少錢(qián)
復(fù)制代碼 代碼如下:

script>
var xmlHttp;
var BrowerType="ie";
function createXML(){
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e2) {
xmlHttp =false;
}
}
if (!xmlHttp typeof XMLHttpRequest != 'undefined'){
xmlHttp = new XMLHttpRequest();
BrowerType = "ff"; //用于記錄是否火狐,以便下面處理接收中文數(shù)據(jù)分析使用。
}
}
function querytelcode(citys){
createXML();
showState=document.getElementById("showtelcode");
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 2){
showState.innerHTML = 'img src="/img/process.gif" />';
}else if (xmlHttp.readyState == 4 xmlHttp.status == 200){
if (BrowerType=="ff"){
getLastCode=xmlHttp.responseText;//FireFox
}else{
getLastCode=gb2utf8(xmlHttp.responseBody);
}
showState.innerHTML = getLastCode;
}
}
var url='myorderAjax.asp?oid=%=Request.QueryString("orderid")%>cityname='+citys;
xmlHttp.open ("GET",url,true);
if (BrowerType=="ff"){
xmlHttp.overrideMimeType("text/html;charset=gb2312");//設(shè)定以gb2312編碼識(shí)別數(shù)據(jù),只有FF支持。IE不行
}
xmlHttp.send(null);
}
function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = 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;
while(++ij) {
k=t[i].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);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
/script>

以下是此篇文章全文:
XMLHttpRequest 默認(rèn)是用UTF-8 傳遞數(shù)據(jù)。當(dāng)服務(wù)端的返回?cái)?shù)據(jù)是UTF-8編碼的時(shí)候,它工作得很好(開(kāi)發(fā)web應(yīng)用,當(dāng)服務(wù)端和客戶(hù)端以及數(shù)據(jù)庫(kù)統(tǒng)一使用UTF-8編碼可以有效的避免亂碼問(wèn)題)。如果服務(wù)端設(shè)置了正確的Content-Type Response Header以及編碼信息,那么XmlHttpRequest也可以正確工作。
可是當(dāng)使用XMLHttpRequest讀取中文網(wǎng)頁(yè)內(nèi)容時(shí), 如果服務(wù)端的程序沒(méi)有設(shè)置Content-Type Response Header,或者Header沒(méi)有設(shè)置編碼類(lèi)型,那么我們?cè)L問(wèn)responseText屬性的時(shí)候就可能遭遇亂碼。如以下代碼用XMLHttpRequest獲取雅虎中國(guó)網(wǎng)站的星座站首頁(yè):
復(fù)制代碼 代碼如下:

xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(xmlhttp.responseText);
};
xmlhttp.send(null);

縱使yahoo中國(guó)這樣專(zhuān)業(yè)的網(wǎng)站,對(duì)web標(biāo)準(zhǔn)的支持還很不徹底,彈出的html源碼中充斥不符合web標(biāo)準(zhǔn)的html標(biāo)簽,當(dāng)然還有已預(yù)見(jiàn)的亂碼。
同樣遺憾的是,F(xiàn)ireFox 和 IE 的解決方法也是南轅北轍
FireFox 做法:
FireFox 的XMLHttpRequest對(duì)象支持overrideMimeType方法,可以指定返回?cái)?shù)據(jù)的編碼類(lèi)型,利用該方法可以解決中文亂碼,前面的代碼修改如下:
復(fù)制代碼 代碼如下:

xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.overrideMimeType("text/html;charset=gb2312");//設(shè)定以gb2312編碼識(shí)別數(shù)據(jù)
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(xmlhttp.responseText);
};
xmlhttp.send(null);

Internet Explorer 做法:
IE不支持overrideMimeType方法,并且只能用一種很蹩腳的方法來(lái)解決,此時(shí)需要引入一個(gè)雜交的函數(shù):
復(fù)制代碼 代碼如下:

function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = 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;
while(++ij) {
k=t[i].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);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(gb2utf8(xmlhttp.responseBody)); //注意這里要用responseBody
};
xmlhttp.send(null);

gb2utf8函數(shù)直接解析XMLHttpRequest返回的二進(jìn)制數(shù)據(jù),其中要利用execScript方法來(lái)執(zhí)行VBScript的函數(shù)。所以說(shuō)是一個(gè)雜交的函數(shù)。感謝blueidea論壇 提供的算法。
雖然有了解決的辦法,但形式丑陋,而且不符合web標(biāo)準(zhǔn)。所以應(yīng)該在編程中盡量避免,如果是開(kāi)發(fā)web應(yīng)用,應(yīng)盡量使用UTF-8編碼,或者在服務(wù)端設(shè)置正確的編碼信息。至于以上范例,有盜取其他網(wǎng)站內(nèi)容的嫌疑,更是不為提倡。
附一篇:討論:
原因:AJAX在接收responseText或responseXML的值的時(shí)候是按照UTF-8的格式來(lái)解碼的,如果服務(wù)器段發(fā)送的數(shù)據(jù)不是UTF-8的格式,那么接收responseText或responseXML的值有可能為亂碼。
解決辦法: 在服務(wù)器指定發(fā)送數(shù)據(jù)的格式:
在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");
討論:
PHP:header('Content-Type:text/html;charset=GB2312');
這樣寫(xiě)除非是小項(xiàng)目
大項(xiàng)目都是按照框架走
對(duì)于HEADER定義于config文件最前端解決方案
在JS里有一個(gè)解析utf-8xml的方法寫(xiě)的非常強(qiáng)
建議用那
非物理生命 traindiy
您可能感興趣的文章:
  • 十個(gè)優(yōu)秀的Ajax/Javascript實(shí)例網(wǎng)站收集
  • php ajax網(wǎng)站瀏覽統(tǒng)計(jì)功能的簡(jiǎn)單實(shí)現(xiàn)
  • PHP+Ajax 網(wǎng)站SEO查詢(xún)工具 提供代碼
  • 爬取今日頭條Ajax請(qǐng)求
  • ajax+node+request爬取網(wǎng)絡(luò)圖片的實(shí)例(宅男福利)
  • 通過(guò)抓取淘寶評(píng)論為例講解Python爬取ajax動(dòng)態(tài)生成的數(shù)據(jù)(經(jīng)典)
  • 如何爬取通過(guò)ajax加載數(shù)據(jù)的網(wǎng)站

標(biāo)簽:延邊 阿拉善盟 益陽(yáng) 銅陵 鷹潭 張掖 儋州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文》,本文關(guān)鍵詞  編碼,為,GB2312,網(wǎng)站,讓,AJAX,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    太康县| 凤凰县| 秭归县| 芦山县| 遂平县| 永定县| 临江市| 贡山| 玉溪市| 乐陵市| 开原市| 黑水县| 金门县| 屏东县| 横峰县| 拉萨市| 农安县| 韶关市| 兴业县| 甘孜县| 呈贡县| 富蕴县| 奎屯市| 涞源县| 阿拉善盟| 大田县| 湖州市| 壶关县| 股票| 昭平县| 通榆县| 德江县| 五大连池市| 郓城县| 青河县| 定远县| 马山县| 武清区| 齐河县| 临夏县| 曲阳县|