用于查询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是正确编码的:
在技术上做:
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
可能会显示为"&"
:
row.Cells[4].Text.ToString() = xxxx&
所以在这种情况下,你会想要使用:
.Replace("&", "%26")