2008年7月26日 星期六

escape、encodeURI、encodeURICompoent 方法的差異

最近在進行一個小的 FF Greasemonkey project。發現用 encodeURI 後在 POST 出去的資料只要遇到 < 符號就會被截斷,直覺上就是編碼的關係。 查了一下 Google,才發現 escape、encodeURI、encodeURICompoent 方法上的差異(可參考 http://xkr.us/articles/javascript/encode-compare/
  • escape: 採用 ISO Latin 字符集對指定的字符串進行編碼。所有的空格符、標點符號、特殊字符以及其它非 ASCII 字符都將被轉化成 %xx 格式的字符編碼(xx 等於該字符在字符集表裡面的編碼的 16 進制數字)。比如,空格符對應的編碼是 %20。unescape方法與此相反。不會被此方法編碼的字符: @ * / +
  • encodeURI: 把 URI 字符串採用 UTF-8 編碼格式轉化成 escape 格式的字符串。不會被此方法編碼的字符: ! @ # $& * ( ) = : / ; ? + '
  • encodeURIComponent: 把 URI 字符串採用 UTF-8 編碼格式轉化成 escape 格式的字符串。與 encodeURI 相比,這個方法將對更多的字符進行編碼,比如 / 等字符。所以如果字符串裡面包含了 URI 的幾個部分的話,不能用這個方法來進行編碼,否則 / 字符被編碼之後 URL 將顯示錯誤。不會被此方法編碼的字符: ! * ( )

沒有留言: