2010-04-23 96 views
4

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

加号“+”,美元“$”和逗号 “”字已被添加到
那些在‘保留’设置,因为 他们被视为在 内保留查询组件。

事实上,搜索这个网站的“加+逗号,美元$”,你会得到

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

加上仅编码(应用程序),当它没有被用来作为分隔符。

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

回答

7

此行为在哪里指定?

HTML spec,很好奇。

UrlDecode是一种误导性命名。

+只代表HTML中定义的application/x-www-form-urlencoded数据中的空格;即以POST提交请求主体的形式或URL的?query部分。这是一个特例!在URL的其他地方,加号只是一个优点。

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

在此URL参数query name设置为query value。它可能通过GET表单提交这份表单字段来产生:

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

但是,文件夹的名字是从字面上path+path。没有空间。

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