200907081328JavaScript 網址編碼函式 escape encodeURI encodeURIComponent 的不同
在 JavaScript 處理網址的時候,常常會用到 escape encodeURI encodeURIComponent 這三個函式。這三個函式功能很像,但又有些許不同,所以寫篇文章記錄三個函式的不同之處。
不同之處大致上來說可以分成兩部份,第一個部份是不處理的字元不同。除了 [A-Z] 、 [a-z] 、 [0-9] 是三個函式都不處理外。 escape encodeURI encodeURIComponent 不處理的字元分別是︰
escape | * + - . / @ _ |
encodeURI | * + - . / @ _ ! # $ ' ( ) , : ; = ? ~ |
encodeURIComponent | * - . / @ _ ! ' ( ) ~ |
第二個不同的部份是 escape 對多位元字元的處理和 encodeURI encodeURIComponent 不同。例如 UTF-8 編碼的「中」這個字, escape('中') 會變成 %u929D%uFFFD , encodeURI('中') 和 encodeURIComponent('中') 則是 %E9%8A%9D%EF%BF%BD 。
把 escape encodeURI encodeURIComponent 解碼回來的函式分別是 unescape decodeURI decodeURIComponent 。
依我個人的經驗,我最常用的是 encodeURIComponent 。
回應