PartIPost中文內容
先看看E文的表單是怎麼提交的:
複製代碼代碼如下:
<SCRIPTlanguage="JavaScript">
strA="submit1=Submit&text1=scsdfsd";
varoReq=newActiveXObject("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把一個HTMLForm中的Post內容寫出來看了看,才發現問題——Form提交時也要編碼的,編碼後的中文是類似於%??%??的轉義字符,比如“中文”就被編碼為:%D6%D0%CE%C4。呵呵,也怪俺笨,人家CONTENT-TYPE裡明明寫的清清楚楚——application/x-www-form-urlencoded,urlencoded嘛當然就是這個樣子了。既然這樣,那我們也知道該怎麼辦了——自己做轉換,代碼見下:
複製代碼代碼如下:
FunctionURLEncoding(vstrIn)
strReturn=""
Fori=1ToLen(vstrIn)
ThisChr=Mid(vStrIn,i,1)
IfAbs(Asc(ThisChr))<&HFFThen
strReturn=strReturn&ThisChr
Else
innerCode=Asc(ThisChr)
IfinnerCode<0Then
innerCode=innerCode+&H10000
EndIf
Hight8=(innerCodeAnd&HFF00)/&HFF
Low8=innerCodeAnd&HFF
strReturn=strReturn&"%"&Hex(Hight8)&"%"&Hex(Low8)
EndIf
Next
URLEncoding=strReturn
EndFunction
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.sendstrA
</ScRIPT>
(在這裡俺把前面的JavaScript的代碼改成了VBScript,不是吃飽了撐的沒事幹,原因見後)
PartII.正確顯示得到的中文內容
OK,如果你在Server端把Form的內容寫到數據庫/文件的話,你在那裡看到的中文毫無問題,但是,假如你想看看Server的Response——問題來了:如果Response的結果不是XML,XMLHTTP.responseXML里當然是不會有東東的,那就用responseText好了,在代碼的最後加一句:alert(oReq.responseText)。看看俺們辛勤勞動的結果。