我们的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>
我需要两全其美。
所以我的问题是:
+
工作的超链接?为什么当我用空格替换时,浏览器会将其还原为使用set
' s?答案 0 :(得分:2)
我在.NET 4.5和.NET 4.6.2上都试过了
Uri.EscapeDataString("My Doc Wi'th Spaces.xls");
返回我的%20Doc%20Wi%27th%20Spaces.xls
只是值应该是网址的最后一部分,否则" :"和" / "也将被编码