C# 用于查询字符串的ASP.Net URL编码和
我需要重定向到作为查询字符串传递参数的url 这可以在值中包含一个符号和。比如C# 用于查询字符串的ASP.Net URL编码和,c#,asp.net,query-string,C#,Asp.net,Query String,我需要重定向到作为查询字符串传递参数的url 这可以在值中包含一个符号和。比如 string value = "This & That"; Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value)); 然而,这又回来了 我应该用什么来编码这个字符串 编辑: 感谢Luke指出显而易见的一点,代码确实工作正常。对不起,我的问题毕竟不是一个有效的问题 我将要使用的页面中有很多旧的遗留代码,这些代码
string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));
然而,这又回来了
我应该用什么来编码这个字符串
编辑:
感谢Luke指出显而易见的一点,代码确实工作正常。对不起,我的问题毕竟不是一个有效的问题
我将要使用的页面中有很多旧的遗留代码,这些代码显然正在进行某种编码和解码,使其看起来好像我的urlencode不起作用
不幸的是,我的解决方案是完全停止使用&直到有问题的代码可以重新编写。你难道不讨厌旧代码吗 技术上做:
value = value.Replace("&", "%26")
我会成功的
编辑:整个UrlEncode/HttpEncode方法似乎存在一些棘手的问题,这些问题并不能完全解决问题。不久前我写了一个简单的方法,可能会派上用场。这应该涵盖所有主要的编码问题,而且编写“去初始化器”也很容易
受保护函数SanitizeURLString(ByVal RawURLParameter作为字符串)作为字符串
将结果设置为字符串
结果=参数
结果=结果。替换(“%”,“%25”)
结果=结果。替换(“,“%3E”)
结果=结果。替换(“#”和“%23”)
结果=结果。替换(“{”,“%7B”)
结果=结果。替换(“}”和“%7D”)
结果=结果。替换(“|”和“%7C”)
结果=结果。替换(“\”,“%5C”)
结果=结果。替换(“^”和“%5E”)
结果=结果。替换(“~”,“%7E”)
结果=结果。替换(“[”,“%5B”)
结果=结果。替换(“]”,“%5D”)
结果=结果。替换(“`,“%60”)
结果=结果。替换(“;”,“%3B”)
结果=结果。替换(“/”,“%2F”)
结果=结果。替换(“?”,“%3F”)
结果=结果。替换(“:”,“%3A”)
结果=结果。替换(“@”和“%40”)
结果=结果。替换(“=”,“%3D”)
结果=结果。替换(&,“%26”)
结果=结果。替换(“$”,“%24”)
返回结果
端函数
建议Server.UrlEncode
应正确处理符号和
我刚刚测试了您的确切代码,返回的字符串编码正确:
另一个需要转义的字符是撇号。将其替换为%27
stringurl=Server.UrlEncode(值)。替换(“,“%27”);
HttpUtility.UrlEncode()和Server.UrlEncode()不会将此字符与其他几个字符一起替换,以实现与其他.Net框架的向后兼容性。有关详细信息,请参阅这篇microsoft文章:如果查询字符串中有多个参数,则这是正确的
例如:&firstname=bob&secondName=“Tracy and John”如果您从
网格视图中获取值,则&ersand
很可能显示为”&;“
:
因此,在这种情况下,您需要使用:
.Replace("&", "%26")
您必须使用Server.UrlEncode(包含符号和的字符串)
我刚刚对它进行了测试,返回的查询字符串被正确编码,然后被解码
HttpUtility
无法用于此操作。在.net core 2.1版(2018年底)中,我能够使用以下功能:
System.Web.HttpUtility.UrlEncode(string_to_encode)
同意。“&”是URL中的保留字符,因此不会进行URL编码。从技术上讲,您只需要“清理”正斜杠、符号和问号。URLEncode将完成其余部分。出于某种原因,我认为必须将空格重新编码为%20而不是+,或者它可以进行任何方式吗?@Dillie-O,建议的空格编码现在是“%20“,但历史上使用了“+”(有关更多信息,请参见的第7页)。几乎所有浏览器/服务器等都将处理这两种编码,尽管我不知道.NET为什么仍然使用过时的“+”。结果是否=结果。替换(“%”,“%25”)把上面的那些搞糟。你完全正确!我使用的页面将有很多旧的遗留代码,这些代码显然正在进行某种编码和解码,使它看起来好像我的urlencode不工作。这是正确的。正如它应该的那样!!在没有服务器变量的情况下,你也可以访问它如果您不在ASP应用程序中(因此无法访问服务器
),则可以通过System.Web.HttpUtilityNote为访问此页面的其他人创建urlencode/URDECODE方法您可以使用System.Web.HttpUtility.UrlEncode
。还请注意Server.UrlEncode
、System.Web.HttpUtility.UrlEncode
、System.Uri.EscapeDataString
和System.Uri.EscapeUriString
在编码方式上不一致。不要期望它们有相同的输出,在尝试编码时要小心比较或解码事物,特别是当涉及特殊字符时。
.Replace("&", "%26")
System.Web.HttpUtility.UrlEncode(string_to_encode)