2013-03-25 58 views
2

我有以下問題:如何處理URL參數中的&符號?

我正在使用的應用程序,允許用戶連接文本構建通過GET方法,即像傳遞參數給ASP頁面的URL:

http://myhostname/process.asp?param1=value1&param2=value2 

問題是value1,value2可能包含&符號,它不會被解釋爲文本字符。

這個問題最流行的解決方案是對URL進行編碼,這對我來說不是一種選擇,因爲我無法修改構建URL的程序。我可以修改process.asp頁面,但不能連接文本字段並構建URL。

事情我已經試圖尋找是:

  • 如何直接在瀏覽器使用JavaScript編碼URL

  • 如何讀取&

  • 時更改IIS默認行爲
  • 傳遞參數的替代方法,例如將它們作爲用管道分隔的單個字符串傳遞的方式

希望你能給我一些指導。

回答

-1

如果等號之間有2個(或更多)與號,則只有最後一個是參數分隔符。所以,使用URL上方,並假設值1 = 「ABC &高清」,並值2 = 「」,那麼URL會看起來像:

http://myhostname/process.asp?param1=abc&def&param2=123 

公告有2等號之間的&符號。最後一個將是你的參數分隔符,其餘的是值的一部分。最後等號後的任何&符號也是該值的一部分。

您必須剖析傳入的URL並應用適當的邏輯。

+0

我無法確認您在我的開發中所說的話。機。 'Request.QueryString(「param1」)'返回'abc',而不是'abc&def'。 – 2013-03-25 04:25:27

+0

你不能做Request.QueryString。你必須閱讀整個URL並自己解析。 – 2013-03-25 07:00:48

1

你可以閱讀整個查詢字符串,並自己解析它,就像這樣:

q = Request.QueryString 
    a = Split(q, "=") 
    i = 1 
    For Each s In a 
    If i mod 2 = 0 Then 
     If InStr(s, "&") <> InStrRev(s, "&") Then 
     Response.Write "Value: " & Left(s, InStrRev(s, "&") - 1) & "<br/>" 
     hidingParam = Right(s, Len(s) - InStrRev(s, "&")) 
     Response.Write "PAramName: " & hidingParam & "<br/>" 
     i = i + 1 
     Else 
     Response.Write "Value: " & s & "<br/>" 
     End If 
    Else 
     Response.Write "PAramName: " & s & "<br/>" 
    End If 
    i = i + 1 
    Next 


結果:

網址:...?Q=abc&def&P=123產生

PARAMNAME:Q
價值:abc & def
PAramName:P
Value:123

請注意,這比健壯性低。我只是在說明我的想法。我沒有測試沒有&

它也不會處理多個「=」字符(如果這也是可能的話)。

相關問題