2017-08-09 51 views
0

我們的Web應用程序使用超鏈接引用下載的資料。最近出現了一個問題,即文件名中的撇號突破了href鏈接,從而阻止了它被下載。如何正確編碼超鏈接到文件名包含空格的文檔?

所以我決定編碼的URL與HttpUtility.UrlEncode,以便撇號編碼爲%27。在這個過程中,空間被編碼爲+就像這樣:

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

每當URL通過鏈接訪問或複製並粘貼到瀏覽器或Firefox的地址欄,我得到一個404。然而,當我手動將空格替換爲+,然後按回車鍵,文檔按預期下載。奇怪的是,下載後立即將URL恢復到使用+的這會導致另一個404,當我刷新瀏覽器的原始格式。不明白它...瀏覽器不喜歡+,但然後決定它呢?

如果我使用HttpUtility.UrlPathEncode,那麼它會將空格編碼爲%20,這會導致工作網址,但它不會對單引號進行編碼,因此我又回到了原點。

我需要的兩全其美這裏。

所以我的問題是:

  • 我怎麼能編碼具有(在Windows操作系統和所有其他法律文件名字符)空格和撇號的文件的文件名
  • 爲什麼不願意用+超鏈接當直接打開工作?當我用空格替換時,瀏覽器會如何恢復使用+的?
+0

我覺得Uri.EscapeDataString是您正在尋找 – Kevin

+0

@Kevin,該方法編碼空間'%20',但*不*編碼撇號。對於https://stackoverflow.com/questions/575440/url-encoding-using-c-sharp的回答表明,確實如此,但我與.NET 4.6.2結果表明並非如此。 – oscilatingcretin

+0

這這整個quesiton點現在可以作爲實際意義的問題可能只是用的WebForms如何分配到的URI鏈接的'href'屬性。當我使用Chrome瀏覽器編輯HTML源代碼時,'''可以正常工作。我想我會做的就是在代碼中用'%27'明確替換'''。我試過這個,它的工作原理。 – oscilatingcretin

回答

2

我已經在.NET 4.5和.NET都嘗試4.6.2

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

回報我%20Doc%20Wi%第27%20Spaces.xls

就值應爲URL的最後部分,否則「」和「/」也將被編碼

相關問題