一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP教程 - ajax XMLHTTP Post Form時的表單亂碼綜合解決

ajax XMLHTTP Post Form時的表單亂碼綜合解決

2019-09-27 09:19asp教程網 ASP教程

用XMLHTTP Post Form時的表單亂碼有兩方面的原因——Post表單數據時中文亂碼;服務器Response被XMLHTTP不正確編碼引起的亂碼。換句話說,本文主要解決兩個問題——怎樣正確Post中文內容&怎樣正確顯示得到的中文內容。

Part I Post中文內容  
先看看E文的表單是怎么提交的: 

復制代碼代碼如下:


<SCRIPT language="JavaScript">   
strA = "submit1=Submit&text1=scsdfsd";   
var oReq = new ActiveXObject("MSXML2.XMLHTTP");   
oReq.open("POST","http://ServerName/VDir/TstResult.asp",false);   
oReq.setRequestHeader("Content-Length",strA.length);   
oReq.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");   
oReq.send(strA);   
</SCRIPT>  


  如果把strA = "submit1=Submit&text1=scsdfsd";換成:strA = "submit1=Submit&text1=中文";  
  你會發現提交上去的東東根本不對,ASP中Request.Form("Text1")根本取不到值。俺用Request.BinaryRead把一個HTML Form中的Post內容寫出來看了看,才發現問題——Form提交時也要編碼的,編碼后的中文是類似于%??%??的轉義字符,比如“中文”就被編碼為:%D6%D0%CE%C4。呵呵,也怪俺笨,人家CONTENT-TYPE里明明寫的清清楚楚——application/x-www-form-urlencoded,urlencoded嘛當然就是這個樣子了。既然這樣,那我們也知道該怎么辦了——自己做轉換,代碼見下: 

復制代碼代碼如下:


Function URLEncoding(vstrIn)   
strReturn = ""   
For i = 1 To Len(vstrIn)   
ThisChr = Mid(vStrIn,i,1)   
If Abs(Asc(ThisChr)) < &HFF Then   
strReturn = strReturn & ThisChr   
Else   
innerCode = Asc(ThisChr)   
If innerCode < 0 Then   
innerCode = innerCode + &H10000   
End If   
Hight8 = (innerCode And &HFF00)\ &HFF   
Low8 = innerCode And &HFF   
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)   
End If   
Next   
URLEncoding = strReturn   
End Function   
strA = URLEncoding("submit1=Submit&text1=中文")   
oReq = CreateObject("MSXML2.XMLHTTP")   
oReq.open "POST","http://ServerName/VDir/TstResult.asp",false   
oReq.setRequestHeader "Content-Length",Len(strA)   
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"   
oReq.send strA   
</ScRIPT> 


(在這里俺把前面的JavaScript的代碼改成了VBScript,不是吃飽了撐的沒事干,原因見后)  
Part II.正確顯示得到的中文內容  
OK,如果你在Server端把Form的內容寫到數據庫/文件的話,你在那里看到的中文毫無問題,但是,假如你想看看Server的Response——問題來了:如果Response的結果不是XML,XMLHTTP.responseXML里當然是不會有東東的,那就用responseText好了,在代碼的最后加一句:alert(oReq.responseText) ??纯窗硞冃燎趧趧拥慕Y果。 
  但是但是.....怎么所有的中文全變成了方格? (我打不出來,有興趣自己去試,也不用Post,Get一個含有中文的網頁就可以發現了。)  

  原因很簡單:XMLHTTP得到Response時假定Response是UTF8編碼的,如果Response是XML,那還可以通過encoding來指定編碼,但HTML就不行了。(見鬼的GB2312,再次打倒?。┧运押珿B2312編碼的HTML當成UTF8格式,不出錯才有鬼! 

  不過好在還有補救的辦法:XMLHTTP的responseBody 屬性里包含的可是未解碼的Resonse——"a raw undecoded bytes as received directly from the server" :),唯一的問題是,responseBody返回的是一個unsigned bytes數組,我們怎么去訪問它,怎么把它轉換成BSTR?  
  這就是為什么我在上面把代碼改成VBScript的原因——VBScript Can do it,but JavaScript Cannot!  
  代碼見下:  

復制代碼代碼如下:


<SCRIPT language="VBScript">   
Function URLEncoding(vstrIn)   
strReturn = ""   
For i = 1 To Len(vstrIn)   
ThisChr = Mid(vStrIn,i,1)   
If Abs(Asc(ThisChr)) < &HFF Then   
strReturn = strReturn & ThisChr   
Else   
innerCode = Asc(ThisChr)   
If innerCode < 0 Then   
innerCode = innerCode + &H10000   
End If   
Hight8 = (innerCode And &HFF00)\ &HFF   
Low8 = innerCode And &HFF   
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)   
End If   
Next   
URLEncoding = strReturn   
End Function   
Function bytes2BSTR(vIn)   
strReturn = ""   
For i = 1 To LenB(vIn)   
ThisCharCode = AscB(MidB(vIn,i,1))   
If ThisCharCode < &H80 Then   
strReturn = strReturn & Chr(ThisCharCode)   

Else   
NextCharCode = AscB(MidB(vIn,i+1,1))   
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))   
i = i + 1   
End If   
Next   
bytes2BSTR = strReturn   
End Function   
strA = URLEncoding("submit1=Submit&text1=中文")   
oReq = CreateObject("MSXML2.XMLHTTP")   
oReq.open "POST","http://ServerName/VDir/TstResult.asp",false   
oReq.setRequestHeader "Content-Length",Len(strA)   
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"   
oReq.send strA   
alert bytes2BSTR(oReq.responseBody)   
</SSRIPT> 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女黄金大片视频免费看 | 日本春菜花在线中文字幕 | 大ji巴好好爽好深网站 | 欧美丝袜foot job | 国产90后美女露脸在线观看 | 欧美成人精品福利网站 | 久久久久久久久女黄9999 | 欧美一区欧美二区 | 成年人网站免费在线观看 | 久久青青草原精品国产软件 | 2020国产精品视频 | 久久xxxx| 国产成人精品免费大全 | 欧美丝袜videohd| 色综合久久天天综合 | 91porny紧身翘臀 | 逼毛片 | 高清在线观看免费入口 | 国产日韩高清一区二区三区 | 99久视频 | 天天做日日爱 | 女人扒开下面让男人桶爽视频 | 日韩欧美不卡视频 | 亚洲精品国产精品麻豆99 | 亚洲精品久久久打桩机 | 精品人人做人人爽久久久 | 国产亚洲女人久久久久久 | 热99re久久精品国产首页 | 亚洲卡一卡2卡三卡4麻豆 | 国产一区二区在线观看视频 | 四虎影院新网址 | 毛片啪啪视频 | 成人男女啪啪免费观看网站 | 精品亚洲综合久久中文字幕 | 亚洲国产精品久久精品成人网站 | 暖暖暖免费观看在线观看 | 亚洲精品久久久打桩机 | 国产91成人精品亚洲精品 | 日韩成人在线网站 | blacked黑人hd2021 bestialityvideo另类 | 国产一页 |