• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:52:30
    文檔

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

    編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文: 代碼如下:<script> var xmlHttp; var BrowerType=ie; function createXML(){ try{ xmlHttp = new ActiveXObject(Msxml2.XMLHTTP); } catch (e){ try{ xmlHttp = new ActiveXObject(Mi
    推薦度:
    導(dǎo)讀編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文: 代碼如下:<script> var xmlHttp; var BrowerType=ie; function createXML(){ try{ xmlHttp = new ActiveXObject(Msxml2.XMLHTTP); } catch (e){ try{ xmlHttp = new ActiveXObject(Mi

    代碼如下:

    <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="https://www.gxlcms.com/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ù)據(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(++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 默認(rèn)是用UTF-8 傳遞數(shù)據(jù)。當(dāng)服務(wù)端的返回數(shù)據(jù)是UTF-8編碼的時候,它工作得很好(開發(fā)web應(yīng)用,當(dāng)服務(wù)端和客戶端以及數(shù)據(jù)庫統(tǒng)一使用UTF-8編碼可以有效的避免亂碼問題)。如果服務(wù)端設(shè)置了正確的Content-Type Response Header以及編碼信息,那么XmlHttpRequest也可以正確工作。
    可是當(dāng)使用XMLHttpRequest讀取中文網(wǎng)頁內(nèi)容時, 如果服務(wù)端的程序沒有設(shè)置Content-Type Response Header,或者Header沒有設(shè)置編碼類型,那么我們訪問responseText屬性的時候就可能遭遇亂碼。如以下代碼用XMLHttpRequest獲取雅虎中國網(wǎng)站的星座站首頁:
    代碼如下:

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

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

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

    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函數(shù)直接解析XMLHttpRequest返回的二進制數(shù)據(jù),其中要利用execScript方法來執(zhí)行VBScript的函數(shù)。所以說是一個雜交的函數(shù)。感謝blueidea論壇 提供的算法。
    雖然有了解決的辦法,但形式丑陋,而且不符合web標(biāo)準(zhǔn)。所以應(yīng)該在編程中盡量避免,如果是開發(fā)web應(yīng)用,應(yīng)盡量使用UTF-8編碼,或者在服務(wù)端設(shè)置正確的編碼信息。至于以上范例,有盜取其他網(wǎng)站內(nèi)容的嫌疑,更是不為提倡。
    附一篇:討論:
    原因:AJAX在接收responseText或responseXML的值的時候是按照UTF-8的格式來解碼的,如果服務(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');
    這樣寫除非是小項目
    大項目都是按照框架走
    對于HEADER定義于config文件最前端解決方案
    在JS里有一個解析utf-8xml的方法寫的非常強
    建議用那
    非物理生命 traindiy

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    編碼為GB2312網(wǎng)站讓AJAX接收的數(shù)據(jù)顯示支持中文: 代碼如下:<script> var xmlHttp; var BrowerType=ie; function createXML(){ try{ xmlHttp = new ActiveXObject(Msxml2.XMLHTTP); } catch (e){ try{ xmlHttp = new ActiveXObject(Mi
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久精品亚洲欧美日韩久久| 欧美精品videosse精子| 最新国产精品拍自在线观看| 92国产精品午夜福利免费| 久久精品无码一区二区无码| 午夜精品久久影院蜜桃| 成人精品一区二区久久久| 国内精品久久久久久99蜜桃| 亚洲欧洲成人精品香蕉网| 国产精品自产拍在线观看花钱看 | 99久久精品日本一区二区免费| 国产专区日韩精品欧美色 | 久久夜色精品国产欧美乱| 日批日出水久久亚洲精品tv| 国产成人精品亚洲精品| 国产高清在线精品二区一| 国产综合精品一区二区三区| 亚洲国产精品无码专区在线观看| 久热精品人妻视频| 国产精品无码v在线观看| 四虎成人www国产精品| 69国产成人综合久久精品| 久久久精品2019免费观看| 亚洲精品无码专区在线播放| 欧美精品黑人粗大视频| 精品国产热久久久福利| 99久久精品国产综合一区| 国产小呦泬泬99精品| 日本伊人精品一区二区三区| 久久久久久久久久免免费精品 | 国产l精品国产亚洲区在线观看| 亚洲AV永久无码精品成人| 亚洲国产成人精品久久久国产成人一区二区三区综 | 精品亚洲视频在线观看| 国产精品偷伦视频免费观看了| 国产精品亚洲产品一区二区三区| 国产精品成人精品久久久| 国产精品免费久久久久影院| 国产精品美女网站在线观看| 国产精品日韩欧美久久综合 | 97精品国产91久久久久久|