用于查询string的ASP.Net URLEncode&符号

我需要redirect到传递参数的url作为查询string。

这可以在值中包含一个&符号。 如

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

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

我应该用什么来编码这个string?

编辑:感谢卢克指出明显,代码确实工作正常。 我道歉,我的问题毕竟不是一个有效的问题!

页面我将有很多旧的遗留代码,显然是做了一些本身的编码和解码,使它看起来好像我的urlencode不工作。

我的解决scheme不幸的是完全放弃使用&直到有问题的代码可以重写。 你不只是讨厌旧的代码!

该文档build议Server.UrlEncode应正确处理&符号。

我刚刚testing了你的确切代码,返回的string是正确编码的:

http://www.example.com/?Value=This+%26+That

在技​​术上做:

 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 

另一个需要逃避的angular色是撇号。 用%27replace它。

string url = Server.UrlEncode(value).Replace("'", "%27);

HttpUtility.UrlEncode()和Server.UrlEncode()不会replace这个字符以及其他几个与其他.Net框架向后兼容的字符。 有关详细信息,请参阅此微软文章: http : //connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

但是如果在查询string中有几个参数,这是正确的。

例如:&firstname = bob&secondName =“Tracy and John”

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

我刚刚testing过,返回的查询string被正确编码,然后解码。

HttpUtility不适用于此操作。

如果你从GridView中获得一个值,那么& ampersand可能会显示为"&amp;"

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

所以在这种情况下,你会想要使用:

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