Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于查询字符串的ASP.Net URL编码和_C#_Asp.net_Query String - Fatal编程技术网

C# 用于查询字符串的ASP.Net 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指出显而易见的一点,代码确实工作正常。对不起,我的问题毕竟不是一个有效的问题 我将要使用的页面中有很多旧的遗留代码,这些代码

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

这可以在值中包含一个符号和。比如

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)