ajax XMLHTTP Post Form时的表单乱码综合解决

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,不是吃饱了撑的没事干,原因见后) 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2811.html