2012-02-22 23 views
0

此問題遵循an earlier one用意外的URL編碼解析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 

任何人都可以請幫助?

+0

您是否從Windows機器發佈到Linux機器? – 2012-02-23 06:38:30

+0

它似乎是一臺Linux機器的Windows機器 – greener 2012-02-23 08:33:58

回答

0

終於想通了,如果他們在「\ t」的格式ASP Request.Form方法不保存選項卡(而不是URL編碼)。但是,PHP的$_POST呢。

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常量。

+0

謝謝,但我恐怕沒有這樣做。我仍然得到: ' userNamepasswordfNamelNameABC123wzbtw88gJoeBloggs' 就好像它不承認換行或製表符... – greener 2012-02-24 10:24:04

+0

剛一看來,作爲ASP/VB使用請求方法處理POST時,換行符和製表符被逃脫。 – greener 2012-02-24 11:18:09

+0

嗨綠色,我更新了我的答案。你可以使用它來解碼URL字符串? – 2012-02-24 17:33:40