使用意外的URL编码解析POST请求

时间:2012-02-22 22:53:24

标签: parsing post vbscript wireshark

此问题遵循an earlier one

以下是一些可以重现问题的代码:

POST:

str = "accountRequest=<NewUser>" & vbLf & _
"Hello" & vbTab & "World" & vbLf & _
"</NewUser>"


Set objHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
objHTTP.open "POST", "service.asp", False 
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send str

response.Write(objHTTP.responseText)

Set objHTTP = Nothing

service.asp:

function w (str)
response.Write(str & "<br>")
end function

str = request.Form("accountRequest")

w(str)
w("Tabs: "& InStr(str,vbTab))
w("Lines: "& InStr(str,vbLf))

输出:

HelloWorld
Tabs: 0
Lines: 0

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

尝试:

 Replace(Request.Form("accountRequest"), vbLF, vbCRLF))

或者:

 Replace(Request.Form("accountRequest"), vbLF, "<br>"))|

根据您显示的位置,两者都应该有效。

或者可能这样:

Function URLDecode(sConvert)
  Dim aSplit
  Dim sOutput
  Dim I
  If IsNull(sConvert) Then
     URLDecode = ""
     Exit Function
  End If

  ' convert all pluses to spaces
  sOutput = REPLACE(sConvert, "+", " ")

  ' next convert %hexdigits to the character
  aSplit = Split(sOutput, "%")

  If IsArray(aSplit) Then
    sOutput = aSplit(0)
    For I = 0 to UBound(aSplit) - 1
      sOutput = sOutput & _
        Chr("&H" & Left(aSplit(i + 1), 2)) &_
        Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)
    Next
  End If

  URLDecode = sOutput
End Function

从这里开始:http://www.aspnut.com/reference/encoding.asp

如果它们以实际的“\”和“n”字符形式出现,则可以使用相应的vbCRLF和vbTAB常量替换这些字符。

答案 1 :(得分:0)

最后发现,如果ASP Request.Form方法采用“\ t”格式(而不是URL编码),则它不会保留标签。但是,PHP的$_POST会这样做。