ASP中实现的URLEncode、URLDecode自定义函数
在做ajax中的post时,发现在服务器端取得数据时总是乱码,网上看了些解决方法也搞不定,我post过去时是xml形式,由于乱码服务器端xml也解析不了或出错。于是在post前先把它编码,到服务器端再解码,这样问题解决了,但是要是数据很大时估计会很影响速度。
虽然ASP中的request会自动解码经过url编码的字符串,但是Request.BinaryRead(Request.TotalBytes)取得post数据时却不会解码,所以要进行解码。
下面是我找到的一个ASP中server.urlencode函数的解码函数
FunctionURLDecode(enStr)
dimdeStr,strSpecial
dimc,i,v
deStr=""
strSpecial="!""#$%&'()*+,.-_/:;<=>?@[/]^`{|}~%"
fori=1tolen(enStr)
c=Mid(enStr,i,1)
ifc="%"then
v=eval("&h"+Mid(enStr,i+1,2))
ifinStr(strSpecial,chr(v))>0then
deStr=deStr&chr(v)
i=i+2
else
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
endif
else
ifc="+"then
deStr=deStr&""
else
deStr=deStr&c
endif
endif
next
URLDecode=deStr
Endfunction
再附一个编码函数,这个与server.urlencode不一样之处是:server.urlencode会将html或xml等标签,如
也会进行编码,而下面这个函数不会。我是用下面的进行编码,再解码,因为我用post时用xml的。
privateFunctionURLEncoding(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