欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > AJAX在GB2312的中文編碼傳輸 AJAX特殊字符編碼正確方法

AJAX在GB2312的中文編碼傳輸 AJAX特殊字符編碼正確方法

熱門標簽:接聽電話機器人哪有 蓄意標記地圖標注 信貸電銷機器人有用嗎 廣西ai語音電銷機器人哪家好 察縣地圖標注 電銷機器人適用范圍 莆田防封電銷卡價格 如何用地圖標注各分公司 辦理一個400電話多少錢
很多可能在轉摘過程中失真或未經驗證就被轉摘,真正使用時卻不行,也由此決定自己全方位試驗一下,努力還是沒有白費,雖然最終得出的結果是很簡單的,但其過程對于一個新學AJAX的人來說,真是挺累。
歡迎您在使用過程中對新的心得一起跟帖交流,一個思想+一個思想,至少可以產生兩個思想。

一、在GET發送時:

方法1:在ASP服務器端用Response.charset="GB2312"界定輸出編碼給調用客戶端
此時客戶端不需要做什么轉換即可。如下兩個文件:
1、客戶端JS
復制代碼 代碼如下:

var xmlHttp;
function createXML(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
function startXml(){
createXML();
xmlHttp.onreadystatechange = handleStateChange;
var url="ajaxtext.asp?tm=1cc"+Math.random();
//var sendContents = 'theinput='+escape(theinput.value);
var regcode="2abc";
xmlHttp.open("get",url,true);
//regcode="regcode="+regcode;
//xmlHttp.setrequestheader("content-length",regcode.length); //可加可不加
//xmlHttp.setRequestHeader("Cache-Control","no-cache");
//xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); //可不加
//xmlHttp.send(null);
//xmlHttp.send("regcode="+escape(regcode));
xmlHttp.send(null);
}
function handleStateChange(){
if (xmlHttp.readyState == 4 xmlHttp.status==200){
//var divid=document.getElementById("results");
retext=xmlHttp.responseText;
alert(retext);
//if(divid.hasChildNodes()){
// divid.removeChild(divid.childNodes[0]);
//}
//var result=document.createTextNode(xmlHttp.responseText);
//divid.appendChild(result);
//document.getElementById("results").innerHTML=xmlHttp.responseText;
}
}

服務器端:
復制代碼 代碼如下:

%Response.CodePage=936%>
%Response.charset="GB2312"
dim reg
reg=Request("regcode")
Response.write "王先生·和他的朋友" '可以正確輸出。
%>

方法2:在客戶端用函數轉換(來自網上)。
復制代碼 代碼如下:

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("%"));
}

此時如果服務器端不指明編碼,那么AJAX默認為UTF-8,就不能在客戶端顯示,用這個函數就可以。
復制代碼 代碼如下:

retext=xmlHttp.responseText;
retext=gb2utf8(retext);
alert(retext);

3、在火狐瀏覽器下:具體請參考:下一篇文章

火狐比較簡單,他可以支持xmlHttp.responseText;//FireFox,但為了代碼簡化,建議用上面的直接做好編碼。
但如果為了通用,就按POST下面介紹的方法來做吧。

二、在POST發送時:

對于常規的中文,上述的GET方法在POST也是可以的,但網上有一篇文章提到了部分符號不能顯示的,比如:下一篇文章中的“test·test+test·”,(中間是間隔號)測試過了,的確在服務器端界定編碼后輸出給客戶端也不能顯示。

如果按照文中所說的,
發送端用xmlHttp.send("regcode="+escape(regcode));

然后在服務器端將接收的數據套上兩個編碼encodeURIComponent(escape(xxxxxxx)),則顯示的結果是:test%25u7A5Eest%2520test,同樣不行。另外這個思路應是不對的,不知道這篇文章在網上被轉抄時是否本身就有錯,按理在客戶端用escape編碼傳送后,在服務器端就應該反編碼。或者REQUEST本身就有解碼的作用。不需要再二次、三次編碼。況且查了一下,escape和encodeURIComponent也無法對特殊字符編碼。

我在服務器端做了如下輸出:
復制代碼 代碼如下:

test2="test·test+test·回饋:"
Response.write test2"前面是服務器直接輸出的而非接收的特殊符號“·”間隔號。后面是接收的數據(內容與原AJAX發送的一樣,用于對比):"

也就是說直接在服務器端生成一個同樣的含特殊字符,這個服務器端文件已經用%Response.charset="GB2312"%>定義好編碼為GB2312。但輸出的結果是,在服務器端生成的test2="test·test+test·回饋:"可以正常輸出,而接收的AJAX值就不行了。
即使在客戶端用JS三個編碼參數escape()\encodeURI() \encodeURIComponent() 全部試過去,然后在服務器商反編碼再輸出,也是不行。這說明字串中的特殊符號在服務器端接收時就已經變形了。

現在問題界定在編碼傳遞上了,為了說明這個問題,我又做了一個小試驗:就是把這個字串賦值給ASP的一個變量再用ASP變量來賦值給JS,如下:
復制代碼 代碼如下:

%
para="test·test+test·/"
para=Server.urlencode(para)
%>

然后轉手給JS變量,如下:
復制代碼 代碼如下:

xmlHttp.open("POST",url,true);
var regcode="%=para%>";
xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=gb2312');
xmlHttp.send("regcode="+regcode);

結果正常了,這充分說明ASP的server.urlencode能完整對特殊字符編碼。而JS還是有欠缺。

那現在怎么辦?

在實在沒辦法的情況下,我想到了即然encodeURIComponent()可以比encode()對更多特殊字符編碼,那么不妨像多重MD5加密一樣,增加強化劑,于是我套用了兩個encodeURIComponent(),現在代碼是:
復制代碼 代碼如下:

var regcode="test·test+test·/";
xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=gb2312');
xmlHttp.send("regcode="+encodeURIComponent(encodeURIComponent(regcode)));

上面是客戶端的,再把服務器端改成:
復制代碼 代碼如下:

script language="javascript" runat="server">
function decodestr(str){
return decodeURIComponent(decodeURIComponent(str));
}
/script>
%
dim reg
reg=Request("regcode")
test2="test·test+test·回饋:"
Response.write test2"前面是服務直接輸入的而非接收的特殊符號“·”間隔號。后面是接收的數據(內容與原AJAX發送的一樣,用于對比):"
Response.write decodestr(reg)
%>

終于完美看到了AJAX輸出的特殊字符。間隔號和+號都出來了,
“test·test+test·/”
為了進一步驗證,我把下面encodeURIComponent也無法編碼的個別特殊字符全加進來了,如下:
復制代碼 代碼如下:

var regcode="漢字開頭:! @ # $ * ( ··) = : / ; ? + 結尾,中間全是特殊字符。";

結果也正常了,太棒!
不過一般AJAX傳給服務器的數據是要應用的,否則沒有意義,為了再進一步驗證數據是否一樣,我把服務器端做了小修改,如下:
復制代碼 代碼如下:

%
dim reg
reg=Request("regcode")
test2="漢字開頭:! @ # $ * ( ··) = : / ; ? + 結尾,中間全是特殊字符。"
IF test2>decodestr(reg) Then
Response.write "不同"
Else
Response.write "相同"
End IF
%>

很興奮。客戶端輸出“相同”,這下可以放心全面應用了。

總結:

1、AJAX客戶端雙重套用encodeURIComponent()對POST的數據編碼。
2、服務器端對應地用decodeURIComponent()雙重解碼即可:
script language="javascript" runat="server">
function decodestr(str){
return decodeURIComponent(decodeURIComponent(str));
}
/script>
3、在接收responseText時,不需要再反編碼了。直接:retext=xmlHttp.responseText;
4、服務器端的這行仍然不可缺:%Response.charset="GB2312"%>,一般在ASP文件中,都有%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>這行,但這行可以去掉,唯獨不能去掉%Response.charset="GB2312"%>,否則出錯。

現在開始,把encodeURIComponent()/decodeURIComponent()背熟就可以。
附:以下幾個編碼方法摘自JS手冊,供參考:

escape() 方法:
采用ISO Latin字符集對指定的字符串進行編碼。所有的空格符、標點符號、特殊字符以及其他非ASCII字符都將被轉化成%xx格式的字符編碼(xx等于該字符在字符集表里面的編碼的16進制數字)。比如,空格符對應的編碼是%20。unescape方法與此相反。不會被此方法編碼的字符: @ * / +

注釋:可以使用 unescape() 對 escape() 編碼的字符串進行解碼。但ECMAScript v3 反對使用這種方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。

encodeURI() 方法: ------ 注意后面一個是大小的i——“I”不是L,下面的decodeURI也不是L。
把URI字符串采用UTF-8編碼格式轉化成escape格式的字符串。不會被此方法編碼的字符:! @ # $ * ( ) = : / ; ? + '

encodeURIComponent() 方法:
把URI字符串采用UTF-8編碼格式轉化成escape格式的字符串。與encodeURI()相比,這個方法將對更多的字符進行編碼,比如 / 等字符。所以如果字符串里面包含了URI的幾個部分的話,不能用這個方法來進行編碼,否則 / 字符被編碼之后URL將顯示錯誤。不會被此方法編碼的字符:! * ( )


引用內容
因此,對于中文字符串來說,如果不希望把字符串編碼格式轉化成UTF-8格式的(比如原頁面和目標頁面的charset是一致的時候),只需要使用escape。如果你的頁面是GB2312或者其他的編碼,而接受參數的頁面是UTF-8編碼的,就要采用encodeURI或者encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之后引進的,escape則在javascript1.0版本就有。

decodeURI() 函數
decodeURI() 函數可對 encodeURI() 函數編碼過的 URI 進行解碼。
script type="text/javascript">

var test1=http://www.w3school.com.cn/My first/
document.write(encodeURI(test1)+ "br />")
document.write(decodeURI(test1))
/script>

decodeURIComponent() 函數:可對 encodeURIComponent() 函數編碼的 URI 進行解碼。
unescape():對escape解碼。
作者:非物理生命博客traindiy
您可能感興趣的文章:
  • jquery與ajax獲取特殊字符實例詳解
  • jQuery 實現ajax傳入參數含有特殊字符的方法總結
  • ajax傳送參數含有特殊字符的快速解決方法
  • jquery ajax對特殊字符進行轉義防止js注入使用示例
  • Ajax傳遞特殊字符的數據如何解決

標簽:張掖 延邊 阿拉善盟 益陽 鷹潭 平涼 儋州 銅陵

巨人網絡通訊聲明:本文標題《AJAX在GB2312的中文編碼傳輸 AJAX特殊字符編碼正確方法》,本文關鍵詞  AJAX,在,GB2312,的,中文,編碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《AJAX在GB2312的中文編碼傳輸 AJAX特殊字符編碼正確方法》相關的同類信息!
  • 本頁收集關于AJAX在GB2312的中文編碼傳輸 AJAX特殊字符編碼正確方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美疯狂做受xxxx富婆| 青青青爽久久午夜综合久久午夜 | 日韩av成人高清| 国产精品69久久久久水密桃 | 久久新电视剧免费观看| 中文字幕一区二区三区不卡在线| 亚洲成人动漫一区| 国产精品影视天天线| 调教驯服丰满美艳麻麻在线视频| 欧亚一区二区三区| 久久久欧美精品sm网站| 亚洲乱码中文字幕综合| 久久99国产乱子伦精品免费| 91麻豆免费在线观看| 欧洲女同同性吃奶| 色系网站成人免费| 2020国产精品| 国产一区二区调教| 一本色道综合久久欧美日韩精品| 色综合网色综合| 久久久久青草大香线综合精品| 精品一区中文字幕| 中文字幕无码日韩专区免费| 51精品国自产在线| 樱桃国产成人精品视频| 床上的激情91.| 艳妇乳肉豪妇荡乳xxx| 萌白酱视频在线| 欧美www视频| 亚洲一区二区美女| 91视频一区二区| 欧美日韩小视频| 亚洲精品va在线观看| 91啪亚洲精品| 6080日韩午夜伦伦午夜伦| 免费人成黄页网站在线一区二区| a天堂中文字幕| 精品国产一区二区三区av性色| 午夜精品福利一区二区三区av | 亚洲高清免费视频| 手机看片国产精品| 欧美性猛交xxxxx少妇| 久久久综合网站| 成人免费看视频| 欧美美女视频在线观看| 亚洲国产欧美另类丝袜| 97人妻精品一区二区免费| 国产欧美一区二区精品忘忧草| 久久超碰97中文字幕| 97超碰在线资源| 国产精品网站导航| 高清不卡在线观看av| 欧美日韩专区在线| 激情综合色播激情啊| 久久久久久久久久网站| 亚洲成人黄色小说| 天天操天天摸天天舔| 亚洲一区在线观看网站| 91成人在线免费视频| 久久久久久久久久久电影| 91在线免费看| 欧美优质美女网站| 精品写真视频在线观看| 在线影院国内精品| 亚洲sss视频在线视频| 成人小视频免费看| 亚洲国产成人va在线观看天堂| 懂色av蜜桃av| 亚洲大片在线观看| 三上悠亚在线观看视频| 亚洲最大成人网4388xx| 国产人成视频在线观看| 日韩女优电影在线观看| 精品在线你懂的| 欧美日韩在线播放三区| 国产福利一区在线观看| 色婷婷av一区二区三区大白胸| 秋霞午夜鲁丝一区二区老狼| 色素色在线综合| 国产一区二区91| 欧美欧美欧美欧美| 不卡视频免费播放| 欧美日本一道本| 成人精品国产福利| 久久午夜电影网| 黄色污在线观看| 久久久国产精华| 国产 xxxx| 亚洲另类在线视频| av片在线免费看| 蜜桃久久久久久| 亚洲av无码一区二区三区在线| 看片网站欧美日韩| 欧美精品在线视频| 99久久综合精品| 欧美成人一区二区三区片免费 | 四虎免费在线视频| 久久爱www久久做| 欧美一区二区三级| 国产99久久久精品| 久久免费偷拍视频| 国产美女喷水视频| 最新中文字幕一区二区三区 | 国产麻豆精品久久一二三| 91精品国产综合久久久久久 | 97人妻人人揉人人躁人人| 亚洲va欧美va国产va天堂影院| 91极品美女在线| 99这里都是精品| 国产精品久久久久影院老司 | 国产黄a三级三级| 毛片一区二区三区| 日韩免费观看高清完整版在线观看| 中文写幕一区二区三区免费观成熟| 亚洲精品在线电影| 欧美色图亚洲激情| 美女视频黄 久久| 日韩欧美国产综合在线一区二区三区| 高清中文字幕mv的电影| 夜夜嗨av一区二区三区中文字幕 | www.av成人| 日本v片在线高清不卡在线观看| 欧美高清视频在线高清观看mv色露露十八 | 日韩欧美亚洲国产另类| 99亚偷拍自图区亚洲| 中文字幕一区二区视频| 成人观看免费视频| 91麻豆国产福利在线观看| 亚洲黄色录像片| 欧美日韩三级一区| a级一a一级在线观看| 日本亚洲一区二区| 欧美精品一区二区三区高清aⅴ| 91精彩刺激对白露脸偷拍| 日韩精品电影一区亚洲| 在线免费观看视频一区| 免费人成视频在线播放| 亚洲韩国精品一区| 欧美一区二区精品久久911| 蜜臀av一区二区三区有限公司| 美国十次了思思久久精品导航| 亚洲精品一区二区三区蜜桃下载 | 欧美性猛片xxxx免费看久爱| 国产精品中文字幕一区二区三区| 国产女人18水真多18精品一级做| 男人av资源站| av电影一区二区| 亚洲影视资源网| 日韩一区二区三区在线| 99精品全国免费观看| 国产高清不卡一区| 亚洲激情六月丁香| 51精品秘密在线观看| 一区二区精品免费| 成人三级伦理片| 亚洲地区一二三色| 精品国产伦一区二区三区观看体验 | 一区二区三区欧美亚洲| 欧美日韩精品免费| 色无极影院亚洲| 国产成人福利片| 一区二区免费在线播放| 日韩午夜精品视频| 青青操在线视频观看| 国产在线观看免费播放| 亚洲一区二区中文在线| 精品久久国产老人久久综合| 国产精品国产三级国产传播| 国产电影一区在线| 洋洋av久久久久久久一区| 日韩欧美国产成人一区二区| 免费在线观看a级片| 亚洲精品鲁一鲁一区二区三区| 蓝色福利精品导航| 亚洲欧美日韩中文播放 | 九色91porny| 另类的小说在线视频另类成人小视频在线| 国产日本欧洲亚洲| 欧美三日本三级三级在线播放| 久久久久久国产精品无码| 99久久精品免费观看| 日本va欧美va欧美va精品| 国产精品国产三级国产| 欧美一区二区三区免费视频| 无码人妻精品中文字幕| 国产免费一区二区三区最新6| 国产麻豆成人精品| 五月综合激情网| 中文字幕在线不卡| 欧美电影免费观看高清完整版在线观看 | 中文字幕在线不卡一区二区三区| 91精品综合久久久久久| 亚洲综合久久av一区二区三区| 久久久久亚洲av成人网人人软件| 国产激情91久久精品导航 | 精品国产一区二区三区久久影院 | 亚洲女爱视频在线| 精品国产乱码久久| 欧美日韩色综合| √天堂中文官网8在线|