23

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

这可以在值中包含与号。如

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

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

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

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

我将要访问的页面有很多旧的遗留代码,这些代码显然在进行某种编码和解码,使其看起来好像我的 urlencode 不起作用。

不幸的是,我的解决方案是完全放弃使用 &,直到可以重写相关代码。你不只是讨厌旧代码!

4

7 回答 7

24

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

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

http://www.example.com/?Value=这个+%26+那个

于 2009-02-18T17:41:32.047 回答
18

技术上做:

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

会成功的。

编辑:整个 UrlEncode/HttpEncode 方法似乎存在一些棘手的问题,这些问题并不能完全解决问题。不久前我写了一个简单的方法,可能会派上用场。这应该涵盖所有主要的编码问题,并且也很容易编写“去消毒剂”。

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
于 2009-02-18T17:05:32.070 回答
3

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

System.Web.HttpUtility.UrlEncode(string_to_encode)
于 2018-11-29T08:10:29.183 回答
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

于 2010-09-22T16:18:07.770 回答
2

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

例如:&firstname=bob&secondName="Tracy and John"

于 2011-03-25T13:19:51.053 回答
2

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

我刚刚对其进行了测试,返回的查询字符串被正确编码然后解码。

HttpUtility不适用于此操作。

于 2012-06-20T13:55:34.073 回答
1

如果您从 a 中获得价值,GridView& ampersand很可能会显示为"&amp;"

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

因此,在这种情况下,您将需要使用:

.Replace("&amp;", "%26")
于 2012-03-16T14:49:00.397 回答