我需要重定向到一个url传递参数作为查询字符串.
这可以包括价值中的&符号.如
string value = "This & That"; Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));
然而,这会返回http://www.example.com/?Value=This+&+That
我应该用什么来编码这个字符串?
编辑:感谢Luke指出显而易见的,代码确实正常工作.我道歉,毕竟我的问题不是一个有效的问题!
我将要访问的页面有很多旧的遗留代码,它显然正在进行某种编码和解码,使得它看起来好像我的urlencode不能正常工作.
不幸的是,我的解决方案是完全放弃使用&,直到可以重写有问题的代码.难道你不讨厌旧代码!
该文件建议,Server.UrlEncode
要正确处理好与符号.
我刚刚测试了您的确切代码,并且返回的字符串已正确编码:
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