escape、encodeURI和encodeURIComponent的區別及使用

編碼

javascript中的編碼函數有三種javascript

  • escape(string)
  • encodeURI(string)
  • encodeURIComponent(string)

解碼

相應的解碼函數也有如下三種java

  • unescape(string)
  • unencodeURI(string)
  • unencodeURIComponent(string)

以上三種編碼函數都是將指定的字符串按照各自的方式轉變爲瀏覽器或腳本可識別的形式,常見於對漢字進行操做,避免出現亂碼的狀況瀏覽器

用法及區別

  • escape(string)
    • 將字符串string轉變爲十六進制的轉義序列,但不會對ASCII字符和數字進行編碼,也不會對如下標點符號進行編碼:-_./
    • 例如
    escape('漢字 你123abcABC'); //"%u6C49%u5B57%20%u4F60123abcABC"
    escape('-_./'); //"-_./"
    escape('"'); //"%22"
    escape(":"); //"%3A"
    • 說明
      從以上結果中代表:escape(string)除字母、數字以及一些特殊字符(-_./)外,都會對其進行編碼,區別在於,漢字和中文標點符號被轉換爲%u開頭的四位十六進制數(%u6C49),英文標點符號被轉換爲%開頭的兩位十六進制(%20
  • encodeURI(string)
    • 將字符串string轉變爲十六進制的轉義序列,但不會對ASCII字符和數字進行編碼,也不會對如下符號進行編碼:-_.!~*'/();?:@&=+$,#
    • 例如
    encodeURI('漢'); //"%E6%B1%89"
    encodeURI('漢字 你123abcABC'); //"%E6%B1%89%E5%AD%97%20%E4%BD%A0123abcABC"
    encodeURI("-_.!~*'/();?:@&=+$,#"); //"-_.!~*'/();?:@&=+$,#"
    encodeURI('"'); //"%22"
    • 說明
      從以上結果中代表:encodeURI(string)除字母、數字以及一些特殊字符(-_.!~*'/();?:@&=+$,#)外,都會對其進行編碼,區別在於,漢字和中文標點符號被轉換爲三組%開頭的兩位十六進制數(%E6%B1%89),英文標點符號被轉換爲%開頭的兩位十六進制(%20
  • encodeURIComponent(string)
    • 將字符串string轉變爲十六進制的轉義序列,但不會對ASCII字符和數字進行編碼,也不會對如下符號進行編碼:-_.!~*'()
    • 例如
    encodeURIComponent('漢'); //"%E6%B1%89"
    encodeURIComponent('漢字 你123abcABC'); //"%E6%B1%89%E5%AD%97%20%E4%BD%A0123abcABC"
    encodeURIComponent("-_.!~*'()"); //"-_.!~*'()"
    encodeURIComponent('"'); //"%22"
    • 說明
      從以上結果中代表:encodeURIComponent(string)除字母、數字以及一些特殊字符(-_.!~*'())外,都會對其進行編碼,區別在於,漢字和中文標點符號被轉換爲三組%開頭的兩位十六進制數(%E6%B1%89),英文標點符號被轉換爲%開頭的兩位十六進制(%20

總結

  • 綜上
    • escape(string)不能用於對url進行編碼,多用於返回字符的Unicode編碼
    • encodeURI(string)能夠對整個url進行編碼
    • encodeURIComponent(string)不能應用於整個url編碼,多用於對地址後的參數值進行編碼
相關文章
相關標籤/搜索