UrlDecode是否正确处理加号(+)?

时间:2010-04-23 17:41:16

标签: .net url-encoding

根据RFC 2396

  

加号“+”,美元“$”和逗号   “,”字符已添加到
  那些在“保留”集中,因为   他们被视为保留   查询组件。

确实,在这个网站上搜索“加+逗号,美元$”,你就得到了

https://stackoverflow.com/search?q=plus+%2B+comma+,+dollar+ $

Plus仅在未被用作分隔符时(由应用程序编码)。

但是作为others have observed,.NET的UrlDecode函数将加号转换为空格。指定了这种行为在哪里?

1 个答案:

答案 0 :(得分:7)

  

指定了此行为的位置?

HTML规范,奇怪的是。

UrlDecode有点误导性地命名。

+仅代表HTML定义的application/x-www-form-urlencoded数据中的空格;也就是说,在表单POST提交请求正文或URL的?query部分。这是一个特例!在URL的其他地方,加号只是一个加号。

http://www.example.com/path+path/x?query+name=query+value

在此网址中,参数query name设置为query value。它可能是通过以GET形式提交此表单字段生成的:

<input name="query name" value="query value">

但是,文件夹名称实际上是path+path。没有空间。

因为这是令人困惑且可能含糊不清的,所以最好的方法是将空格编码为%20。您可以使用UrlPathEncode在.NET中执行此操作。这在URL的查询部分和路径中都同样有效。