我需要重定向到一个将参数作为查询字符串传递的URL。
这可以在值中包含一个&符号。比如
string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));
然而,这会返回http://www.example.com/?Value=This+&+That
我应该用什么来编码这个字符串?
编辑: 感谢Luke指出显而易见的,代码确实正常工作。我道歉,毕竟我的问题不是一个有效的问题!
我要使用的页面有很多旧的遗留代码,这些代码显然正在进行一些编码和解码,使得它看起来好像我的urlencode无效。
不幸的是,我的解决方案是彻底放弃使用&直到有问题的代码可以重写。难道你不讨厌旧代码!
答案 0 :(得分:24)
答案 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
可能会显示为"&"
:
row.Cells[4].Text.ToString() = xxxx&
所以在这种情况下你会想要使用:
.Replace("&", "%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)}