如何正确编码文件名包含空格的文档的超链接?

时间:2017-08-09 11:46:07

标签: asp.net .net urlencode

我们的Web应用程序使用超链接来引用可下载的文档。最近出现了一个问题,即文件名中的撇号打破了href链接,导致无法下载。

所以我决定使用HttpUtility.UrlEncode对网址进行编码,以便将撇号编码为%27。在此过程中,空格被编码为+,如下所示:

http://www.whatever.com/docs/My+Doc+With+Spaces.xls

每当通过链接访问网址或将其复制并粘贴到Chrome或Firefox的地址栏中时,我都会获得404.但是,当我手动将+替换为+时空格并按Enter键,文档按预期下载。奇怪的是,在下载后,网址会立即使用+恢复为原始格式,当我刷新浏览器时,会产生另一个404格式。不要得到它......浏览器不喜欢HttpUtility.UrlPathEncode,但后来决定它呢?

如果我使用%20,那么它会将空格编码为+,这会产生一个有效的URL,但它不会对撇号进行编码,所以我回到了第一个方位。 / p>

我需要两全其美。

所以我的问题是:

  • 如何编码包含空格和撇号的文档文件名(以及Windows操作系统中的所有其他合法文件名字符)
  • 直接打开时,为什么赢得了+工作的超链接?为什么当我用空格替换时,浏览器会将其还原为使用set' s?

1 个答案:

答案 0 :(得分:2)

我在.NET 4.5和.NET 4.6.2上都试过了

Uri.EscapeDataString("My Doc Wi'th Spaces.xls");

返回我的%20Doc%20Wi%27th%20Spaces.xls

只是值应该是网址的最后一部分,否则" "和" / "也将被编码