escape、encodeURI和encodeURIComponent的区别及使用

编码

javascript中的编码函数有三种

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

解码

相应的解码函数也有以下三种

  • 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编码,多用于对地址后的参数值进行编码
posted @ 2017-10-25 13:09  天字天蝎  阅读(398)  评论(0编辑  收藏  举报