Разбор POST-запроса с неожиданным кодированием URL - PullRequest
0 голосов
/ 23 февраля 2012

Этот вопрос следует за более ранним .

Вот код, который воспроизводит проблему:

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 голосов
/ 01 марта 2012

Наконец выяснилось, что метод ASP Request.Form не сохраняет вкладки, если они имеют формат \ t (в отличие от закодированного URL) Тем не менее, PHP $_POST делает.

0 голосов
/ 23 февраля 2012

Попробуйте:

 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.

...