2011-11-03 24 views
7

在最近的一个项目中,我很高兴能够解决一个错误,该错误涉及图像在空格处于文件名时不加载。我以为“多么简单的问题,我会UrlEncode()吧!”但是,不!只需使用UrlEncode()即可解决问题。在ASP.NET中,为什么会有UrlEncode()和UrlPathEncode()?

新的问题是HttpUtilities.UrlEncode()方法交换空间()来加分(+代替%20像浏览器通缉。所以file+image+name.jpg将返回未找到,而file%20image%20name.jpg被发现正确。

谢天谢地,一位同事指出HttpUtilities.UrlPathEncode()给我,%20代替+

为什么有两种处理Url编码的方法?为什么有两个命令行为如此不同?

+0

有关更好的解决方案,请参见http://stackoverflow.com/questions/602642/server-urlencode-vs-httputility-urlencode/603962#603962。 –

+0

可能的重复:http://stackoverflow.com/q/4145823/2291 –

+0

@Mufasa - 嗯...我知道区别。我想知道为什么。 – quakkels

回答

9

UrlEncode为浏览器往往与GET方法提交表单时,这里使用+代替空间的是与查询字符串用途。

UrlPathEncode只是替换URL中不能使用的所有字符,如<,>

两个MSDN链接包括这句话:

可以编码具有以UrlEncode方法或 UrlPathEncode方法使用的URL。但是,这些方法返回不同的结果。 UrlEncode方法将每个空格字符转换为加号字符 (+)。 UrlPathEncode方法将每个空格字符转换为 字符串“%20”,它表示以十六进制表示法的空格。当您编码URL的路径部分 时,请使用 UrlPathEncode方法,以确保解码的URL一致,无论平台或浏览器执行解码的是哪一个 。

+1

微软自此声明不应该使用'UrlPathEncode()'。这是一种用于确保浏览器兼容性的辅助方法。有关详细信息,请参阅UrlPathEncode链接。 – Basic

+0

UrlEncode无法用于编码部分路径,因为+符号不允许在那里。请参阅说明:https://stackoverflow.com/a/29948396/991267 System.Uri.EscapeDataString方法可用于编码路径部分。 –

2

所以在一个URL中,你有路径,然后一个?然后是参数(即http://some_path/page.aspx?parameters)。 URL路径的编码方式与URL参数不同,这就是为什么有两个版本。长期以来,空间在URL中无效,但在参数中。

换句话说,格式化网址已随时间而改变。很长一段时间,只有ANSI字符也可以在URL中。

相关问题