先看看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嘛当然就是这个样子了。既然这样,那我们也知道该怎么办了——自己做转换,代码见下:
以下是引用片段: <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
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,不是吃饱了撑的没事干,原因见后)
[1] [2] [3] 下一页
|