正确地对空格字符进行URL编码

11

我使用HttpUtility.UrlEncode对在路由中使用的任何值进行编码。

我已经解决了编码正斜杠的问题。现在我遇到的新问题是空格。空格被编码为+。

这在VS集成的Web服务器上可以工作,但我在Windows Server 2008上的IIS7上有问题。 如果我的URL是http://localhost/Home/About/asdas+sdasd

我会收到错误404.11-请求包含双重转义序列。

我知道我可以将空格替换为“%20”,但我不想自己处理正确的编码。是否有现成的用于MVC的UrlEncoder可供使用?

3个回答

20

' '编码为%20,使用HttpUtility.UrlPathEncode


这可能已经改变了,但是UrlPathEncode的文档现在说:不要使用;仅用于浏览器兼容性。请使用System.Web.HttpUtility.UrlEncode(System.String) - AaronHolland
然而,如果您使用UrlEncode,仍会将空格编码为+。而UrlPathEncode也不会对#进行编码,因此它们都是有问题的。 - AaronHolland

0

任何URL编码通常都是设计用于URL的路径组件,原因是不同的方案在安全列表中具有不同的字符。查找您的库urlencoder并将其仅用于URL的路径和上面部分。


0
@HttpUtility.UrlPathEncode(path)

UrlPathEncode只对Url的路径进行编码,而不是对整个Url进行编码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接