亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

編碼為GB2312網站讓AJAX接收的數據顯示支持中文

2024-09-01 08:31:36
字體:
來源:轉載
供稿:網友
GB2312 網站AJAX接收的數據顯示支持中文

復制代碼 代碼如下:


<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"; //用于記錄是否火狐,以便下面處理接收中文數據分析使用。
}
}
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");//設定以gb2312編碼識別數據,只有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(++i<j) {
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 默認是用UTF-8 傳遞數據。當服務端的返回數據是UTF-8編碼的時候,它工作得很好(開發web應用,當服務端和客戶端以及數據庫統一使用UTF-8編碼可以有效的避免亂碼問題)。如果服務端設置了正確的Content-Type Response Header以及編碼信息,那么XmlHttpRequest也可以正確工作。
可是當使用XMLHttpRequest讀取中文網頁內容時, 如果服務端的程序沒有設置Content-Type Response Header,或者Header沒有設置編碼類型,那么我們訪問responseText屬性的時候就可能遭遇亂碼。如以下代碼用XMLHttpRequest獲取雅虎中國網站的星座站首頁:

復制代碼 代碼如下:


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中國這樣專業的網站,對web標準的支持還很不徹底,彈出的html源碼中充斥不符合web標準的html標簽,當然還有已預見的亂碼。
同樣遺憾的是,FireFox 和 IE 的解決方法也是南轅北轍
FireFox 做法:
FireFox 的XMLHttpRequest對象支持overrideMimeType方法,可以指定返回數據的編碼類型,利用該方法可以解決中文亂碼,前面的代碼修改如下:

復制代碼 代碼如下:


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


Internet Explorer 做法:
IE不支持overrideMimeType方法,并且只能用一種很蹩腳的方法來解決,此時需要引入一個雜交的函數:

復制代碼 代碼如下:


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(++i<j) {
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函數直接解析XMLHttpRequest返回的二進制數據,其中要利用execScript方法來執行VBScript的函數。所以說是一個雜交的函數。感謝blueidea論壇 提供的算法。
雖然有了解決的辦法,但形式丑陋,而且不符合web標準。所以應該在編程中盡量避免,如果是開發web應用,應盡量使用UTF-8編碼,或者在服務端設置正確的編碼信息。至于以上范例,有盜取其他網站內容的嫌疑,更是不為提倡。
附一篇:討論:
原因: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");
討論:
PHP:header('Content-Type:text/html;charset=GB2312');
這樣寫除非是小項目
大項目都是按照框架走
對于HEADER定義于config文件最前端解決方案
在JS里有一個解析utf-8xml的方法寫的非常強
建議用那
非物理生命 traindiy
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久999| 亚洲成av人影院在线观看| 91深夜福利视频| 日韩精品免费看| 91精品国产91久久久久久不卡| 91在线观看免费高清完整版在线观看| 亚洲天堂免费视频| 日韩精品在线视频| 黑人狂躁日本妞一区二区三区| 日韩国产中文字幕| 亚洲黄色免费三级| 久久久久久久电影一区| 日韩中文字幕在线视频播放| 欧美高清第一页| 国产一区二区日韩| 日韩av在线影院| 国产精品久久久久久久久免费看| 国产一区二区三区在线看| 视频一区视频二区国产精品| 亚洲国产又黄又爽女人高潮的| www.美女亚洲精品| 亚洲人成网站免费播放| 国产精品网站大全| 日韩精品高清在线| 欧美精品免费在线| 亚洲综合最新在线| 国产精品美乳在线观看| 久久精品久久久久电影| 久久久www成人免费精品| 国产精品狼人色视频一区| 久久久久久这里只有精品| 精品亚洲一区二区三区在线观看| 亚洲欧洲一区二区三区久久| 91国产高清在线| 亚洲精品自产拍| 久久综合伊人77777尤物| 欧美日韩综合视频网址| 国语自产精品视频在线看| 久久久999精品视频| 日韩一二三在线视频播| 精品视频在线导航| 2019精品视频| 色噜噜亚洲精品中文字幕| 国产一区二区免费| 国产精品普通话| 狠狠躁夜夜躁人人爽天天天天97| 色综合色综合久久综合频道88| 91久久在线观看| 久久成人人人人精品欧| 久久久精品一区二区| 亚洲精品中文字幕女同| 中文字幕国产亚洲2019| 欧美性猛交99久久久久99按摩| 亚洲成色777777女色窝| 久久99久久亚洲国产| 国产中文日韩欧美| 国产精品色午夜在线观看| 成人妇女淫片aaaa视频| 国产91色在线播放| 中文字幕亚洲在线| 国产在线98福利播放视频| 欧美国产极速在线| 亚洲深夜福利网站| 亚洲国产精品va| 91亚洲精品在线| 美女视频黄免费的亚洲男人天堂| 成人av在线天堂| 国产一区二区成人| 97超级碰在线看视频免费在线看| 国产精品成人观看视频国产奇米| 色偷偷av亚洲男人的天堂| 亚洲精品久久久久中文字幕欢迎你| 亚洲理论电影网| 日韩精品久久久久久福利| 欧美精品精品精品精品免费| 国产一区二区在线免费| 亚洲欧美激情四射在线日| 中文字幕国产精品久久| 亚洲人成电影网站色xx| 中文国产成人精品久久一| 日韩高清电影免费观看完整版| 日本精品视频在线播放| 国产亚洲精品91在线| 国产视频观看一区| 国产精品久久久久久五月尺| 国产精品一区二区三区久久久| 97在线免费观看视频| 国产精品日本精品| 91国内揄拍国内精品对白| 91精品国产综合久久久久久久久| 疯狂做受xxxx高潮欧美日本| 夜色77av精品影院| 中文字幕国内精品| 亚洲激情免费观看| 97视频在线观看成人| 欧美高清视频在线观看| 亚洲天堂av网| 国内精品久久久久久久久| 国产精品第三页| 久久久中精品2020中文| 91精品国产777在线观看| 国内精品视频久久| 欧美成人四级hd版| 久久久久久亚洲精品不卡| 中文字幕亚洲在线| 日韩的一区二区| 中文字幕日韩有码| 欧美精品激情blacked18| 日韩在线观看网址| 久久99精品久久久久久噜噜| 日韩av在线精品| 日韩精品在线视频美女| 九九九久久国产免费| 一本一道久久a久久精品逆3p| 91精品视频观看| 欧美在线激情视频| 午夜精品久久久久久久99热| 国产视频精品一区二区三区| 久久精品国产免费观看| 国产精品偷伦免费视频观看的| 久久视频国产精品免费视频在线| 97色在线观看| 在线电影中文日韩| 7777kkkk成人观看| 欧美疯狂xxxx大交乱88av| 尤物99国产成人精品视频| 日韩在线观看免费av| 亚洲美女av在线| 午夜精品美女自拍福到在线| 亚洲人午夜精品免费| 欧美怡红院视频一区二区三区| 久久影视免费观看| 久久999免费视频| 91久久综合亚洲鲁鲁五月天| 91大神福利视频在线| 一区二区成人av| 欧美高清视频在线播放| 国产亚洲精品美女久久久久| 亚洲深夜福利在线| 中文字幕日韩在线播放| 久久久久久有精品国产| 亚洲国产欧美一区二区三区同亚洲| 日韩视频永久免费观看| 羞羞色国产精品| 亚洲人线精品午夜| 国产精品三级美女白浆呻吟| 少妇av一区二区三区| 亚洲欧美综合另类中字| 日韩激情第一页| 欧美诱惑福利视频| 欧美日韩一区二区三区| 国产精品亚洲片夜色在线| 亚洲性猛交xxxxwww| 91精品国产91久久久久久最新| 亚洲精品日韩久久久| 岛国精品视频在线播放| 欧美亚洲国产视频| 欧美精品在线视频观看| 精品无码久久久久久国产| 久久久久久亚洲精品不卡| 国产精品亚洲激情| 欧美成人在线网站| 91国在线精品国内播放| 久久九九有精品国产23|