ASP.Net URLEncode Ampersand用于查询字符串

时间:2009-02-18 17:03:01

标签: c# asp.net query-string

我需要重定向到一个将参数作为查询字符串传递的URL。

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

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

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

我应该用什么来编码这个字符串?

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

我要使用的页面有很多旧的遗留代码,这些代码显然正在进行一些编码和解码,使得它看起来好像我的urlencode无效。

不幸的是,我的解决方案是彻底放弃使用&直到有问题的代码可以重写。难道你不讨厌旧代码!

7 个答案:

答案 0 :(得分:24)

documentation表明Server.UrlEncode应正确处理&符号。

我刚刚测试了您的确切代码,并且返回的字符串已正确编码:

  

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

答案 1 :(得分:15)

技术上:

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

答案 2 :(得分:2)

需要逃避的另一个角色是撇号。将其替换为%27。

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

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

答案 3 :(得分:2)

这是正确的,但是如果查询字符串中有多个参数。

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

答案 4 :(得分:2)

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

我刚刚测试了它,并且返回的查询字符串已正确编码然后解码。

HttpUtility无法执行此操作。

答案 5 :(得分:1)

如果您从GridView获得值& ampersand可能会显示为"&amp;"

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

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

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

答案 6 :(得分:0)

在.net core 2.1版(2018年末)中,我可以使用以下内容:

>>> G2.edges()
EdgeView([(0, 1), (1, 2), (1, 3), (2, 22)])
>>> G1.edges()
EdgeView([(0, 1), (1, 2), (1, 3), (1, 18)])
>>> G1.edges() - G2.edges()
{(1, 18)}