首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET UrlEncode不工作?

.NET UrlEncode不工作?
EN

Stack Overflow用户
提问于 2015-06-19 07:55:56
回答 2查看 5.7K关注 0票数 8

根据urlencode.asp,当请求被提交时,它们是被URL编码的,例如,空间被转换为%20。

我对此有意见!在表单中提交它将按其应有的方式将其转换为%21。然而,HttpUtility.UrlEncode (或其WebUtility合作伙伴)或Uri.EscapeDataString都将返回!这是否一种预期的行为?我应该如何从c#对输入进行编码,以便它能够转换正确的值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-19 08:04:00

感叹号被认为是URL安全的ASCII字符,因此不编码百分比.

来自MSDN

UrlEncode方法URL-对被认为是URL安全的一组ASCII字符中的任何字符进行编码。空格被编码为ASCII "+“字符。URL安全的ASCII字符包括ASCI字符(A到Z和a到z)、数字(0到9)和一些标点符号。下表列出了被视为URL安全的ASCII字符的标点符号。

该表包含- _ . ! * ( )

更新

根据这个答案的说法,Uri.EscapeDataString在处理.NET 4.5项目时应该对.NET进行编码,但我无法在当前的机器上测试它。以前的EscapeDataString框架中的.NET不对上面的字符进行百分比编码。您可能只需使用String.Replace并替换转义URI中的上述字符。

票数 6
EN

Stack Overflow用户

发布于 2015-06-19 10:03:12

因此,我们有一些字符是在“灰色”区域,可以是,但不需要被编码。

所有字符都可以编码。http://stackoverflow.com/questionshttp://stackoverflow.com/%71%75%65%73%74%69%6F%6E%73都是相同的。

唯一不能对字符进行编码的情况是,如果它是以一种在URI中具有特殊意义的方式使用的,例如/分离路径元素。

必须对字符进行编码的唯一时间,如果:

  1. 这是其中一个特殊意义的字符,而不是与那个特殊的含义一起使用。
  2. 它是在特定URI方案或特定位置中可能具有特殊含义的保留字符之一。
  3. 它有一个关于U+007F的代码点。

不过,最后两种情况也有例外。

在第三种情况下,如果使用IRI,则不对这些字符进行编码,这基本上就是IRI的定义。您可以通过执行或取消该编码在IRI和URI之间进行转换。(主机部分中的任何这样的字符都必须编码,而不是URI编码)。

在第二种情况下,如果字符在所述上下文中不用作分隔符,则不对其进行编码是安全的。例如,&可以保留在某些URI中,但不能放在HTTP中,因为HTTP经常用作查询数据的分隔符。不过,这取决于对特定URI方案的特定知识。这也可能是不值得冒险的一些其他过程,没有意识到它是好的。

!就是一个例子。RFC 3986包括生产:

代码语言:javascript
运行
复制
reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
            / "*" / "+" / "," / ";" / "="

因此,!在一组字符中,可以安全地保留未编码或不编码,这取决于所使用的方案。

通常,如果您正在编写自己的编码代码(例如编写HttpEncoder实现时),那么最好始终对!进行编码,但是如果您使用的编码器并不总是对!进行编码,这也是可以的;当然,在HTTP中,这不会有任何区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30932903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档