ASP.NET 後臺編碼js前臺解碼

在用 ASP.Net 開發頁面的時候, 我們常常通過 System.Web.HttpUtility.UrlEncode 和 UrlDecode 在頁面間通過 URL 傳遞參數. 成對的使用 Encode 和 Decode 是沒有問題的.
C#後臺編碼js前臺解碼
C#後臺編碼js前臺解碼但是, 我們在編寫文件下載的頁面的時候, 常常用如下方法來指定下載的文件的名稱:
C#後臺編碼js前臺解碼Response.AddHeader(
"Content-Disposition","attachment; filename="
C#後臺編碼js前臺解碼
+ HttpUtility.UrlEncode(fileName, Encoding.UTF8));
C#後臺編碼js前臺解碼之所以轉換成 UTF8 是爲了支持中文文件名.
C#後臺編碼js前臺解碼
C#後臺編碼js前臺解碼這時候問題就來了, 因爲 HttpUtility.UrlEncode 在 Encode 的時候, 將空格轉換成加號(
'+'), 在 Decode 的時候將加號轉爲空格, 但是瀏覽器是不能理解加號爲空格的, 所以如果文件名包含了空格, 在瀏覽器下載得到的文件, 空格就變成了加號.
C#後臺編碼js前臺解碼
C#後臺編碼js前臺解碼一個解決辦法是, 在 HttpUtility 的 UrlEncode 之後, 將 
"+" 替換成 "%20"( 如果原來是 "+" 則被轉換成 "%2b" ) , 如: 
C#後臺編碼js前臺解碼fileName 
= HttpUtility.UrlEncode(fileName, Encoding.UTF8); 
C#後臺編碼js前臺解碼fileName 
= fileName.Replace("+""%20"); 
C#後臺編碼js前臺解碼不明白微軟爲什麼要把空格轉換成加號而不是
"%20". 記得 JDK 的 UrlEncoder 是將空格轉換成 "%20"的.
C#後臺編碼js前臺解碼經檢查, 在 .Net 
2.0 也是這樣.

 

後臺用System.Web.HttpUtility.UrlEncode 編碼,前臺用Js中的unescape解碼,替換掉+即可

發佈了83 篇原創文章 · 獲贊 5 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章