Javascript: 編碼處理

(1).若圖片src檔案,或聲音src檔案,或影片src檔案名稱,若有中文名稱,設定之後若再取出,就會被轉譯成url亂碼
例如:%E8%AA%9E%E9%9F%B30025.aac
例如:yahoo新聞的網址:https://tw.news.yahoo.com/3%E6%9C%88%E6%8E%80%E6%89%8B%E6%A9%9F%E5%A4%A7%E6%88%B0-lg-sony-huawei-nokia%E7%AD%89%E6%96%B0%E6%A9%9F%E6%90%B6%E5%B8%82-215005098--finance.html

(2).解決方法:decodeURI()
decodeURI():解碼url亂碼

原理:這些%E8%AA%9E%E9%9F%B30025.aac不是亂碼,而是16進位編碼
這些是因為URL在網路上只能以ASCII碼傳送,而ASCII就只有英、數字及特殊符號,
所以對於中文字碼是沒有支援的,因此須將中文以UTF8轉成16進位編碼(%E8%AA%9E%E9%9F%B30025.aac)

解碼法:decodeURI(‘%E8%AA%9E%E9%9F%B30025.aac’)
結果:語音0025.aac

(3).但是:input text文字欄位,div文字標籤,若設定中文字碼後,再取出,不會有URI亂編碼

(4).javascript的三種編碼與解碼指令:
(A).encodeURI/decodeURI
用於編碼整個URL,因為URL中的合法字元都不會被編碼轉換;
進行url跳轉時可以整體使用encodeURI。

(B).encodeURIComponent/decodeURIComponents
對url的參數編碼,特別在參數也是一個url的情況,如果不編碼會影響整個url跳轉。
例如:document.write('<a href="http://pas.du.com/?logout&aid=7&u='+encodeURIComponent("http://ca.du.com/br")+'">退出</a>');
在向後端傳值時,參數存在特殊字元時,我們一般使用這種編碼方法

(C).escape/unescape
除了ASCII 字母、數位和特定的符號外,對傳進來的字串全部進行轉義編碼;
因此如果想對URL編碼,最好不要使用此方法;
escape()適合對url的參數進行編碼。


(1).div文字標籤:
My Recordings/語音0025.aac

(2).圖片:
(3).影片:
(4).textBox: