Javascript: 網址亂碼如何處理

(1).若複製某些中文網址,貼到Line上,會出現很長的亂碼
例如: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).解決方法二:複製的時候,不要連http一起複製,就不會被轉成16位元編碼
例如:tw.news.yahoo.com/3月掀手機大戰-lg-sony-huawei-nokia等新機搶市-215005098--finance.html

(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).輸入yahoo新聞複製來的URL網址,如: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