2009-02-18 33 views
18

我需要重定向到傳遞參數作爲查詢字符串的URL。ASP.Net的URLEncode和號用於查詢字符串

這可以在值中包含一個&符。如

string value = "This & That"; 
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value)); 

然而,這將返回http://www.example.com/?Value=This+&+That

我應該使用這個字符串編碼?

編輯: 感謝盧克指出顯而易見的代碼確實工作正常。我道歉,我的問題畢竟不是一個有效的問題!

我要的頁面有很多的舊的遺留代碼,顯然是做一些有點兒編碼,並自行解碼使它看起來好像我用urlencode不能正常工作。

我的解決辦法不幸的是,完全刪除使用&,直到有問題的代碼可以重新寫入。你不只是討厭舊代碼!

回答

13

技術上做:

value = value.Replace("&", "%26") 

會做的伎倆。

編輯:似乎有與整個以UrlEncode/HttpEncode方法是不太做的伎倆一些棘手的問題。我寫了一個簡單的方法,可能會派上用場。這應該涵蓋所有主要的編碼問題,並且很容易編寫一個「desanitizer」。

Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String 

     Dim Results As String 

     Results = RawURLParameter  

     Results = Results.Replace("%", "%25") 
     Results = Results.Replace("<", "%3C") 
     Results = Results.Replace(">", "%3E") 
     Results = Results.Replace("#", "%23") 
     Results = Results.Replace("{", "%7B") 
     Results = Results.Replace("}", "%7D") 
     Results = Results.Replace("|", "%7C") 
     Results = Results.Replace("\", "%5C") 
     Results = Results.Replace("^", "%5E") 
     Results = Results.Replace("~", "%7E") 
     Results = Results.Replace("[", "%5B") 
     Results = Results.Replace("]", "%5D") 
     Results = Results.Replace("`", "%60") 
     Results = Results.Replace(";", "%3B") 
     Results = Results.Replace("/", "%2F") 
     Results = Results.Replace("?", "%3F") 
     Results = Results.Replace(":", "%3A") 
     Results = Results.Replace("@", "%40") 
     Results = Results.Replace("=", "%3D") 
     Results = Results.Replace("&", "%26") 
     Results = Results.Replace("$", "%24") 

     Return Results 

End Function 
+1

我希望更多的東西......建於... – 2009-02-18 17:13:22

+0

同意。 「&」是URL中的保留字符,因此不會被URL編碼。 – 2009-02-18 17:14:52

2

這是正確的,如果必須在查詢字符串幾個參數。

例如:&姓=鮑勃& secondName = 「Tracy和約翰」

1

如果你是從一個GridView& ampersand得到一個價值很可能被顯示爲"&amp;"

row.Cells[4].Text.ToString() = xxxx&amp; 

所以在這種情況下,您將要使用:

.Replace("&amp;", "%26") 
2

您必須使用Server.UrlEncode(string containing the ampersand)

我只是測試它和返回的查詢字符串被正確編碼,然後解碼。

HttpUtility沒有爲這個操作工作。