В ASP-запросе не отображаются скрытые символы перевода строки и табуляции - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь разобрать запрос POST, который включает символы "\ n" и "\ t", но как только я использую Request.Form для манипулирования данными, этих символов больше нет. Я использовал Wireshark, чтобы подтвердить, что символы находятся в POST.

Может кто-нибудь помочь, пожалуйста?

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

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 ]

1 голос
/ 01 марта 2012

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

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

Если все, что вы пытаетесь сделать, это предоставить разделитель для данных, передаваемых через строку запроса, тогда я постараюсь использовать более конкретный символ, чем вкладки и новые строки.

| исторически много использовалось для подобных ситуаций Я считаю, что taht # - это еще одно значение, которое без проблем проходит через строку запроса.

Мне лично не нравится полагаться на возможность выбора Tab и NewLine из строкового значения. Слишком предрасположен к потере в определенных ситуациях при прохождении здесь и там.

Просто сделайте это перед отправкой:

str = str.replace(VbTab,"#")
str = str.replace(VbLf,"|")

... а затем обратное обращение на целевой странице, и оно должно работать нормально.

...