• 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编码,多用于对地址后的参数值进行编码
  • 相关阅读:
    【整理】Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
    C/C++中printf和C++中cout的输出格式
    左值的理解(给渴望学习的新手)
    c++ 指针精髓
    c++中的函数前面加个LRESULT是什么意思啊?
    pb调用vc写的动态链接库文件
    C++问题 & *用法
    vs2008下MFC内存泄露问题一点经验
    mysql5.6.41winx64安装
    开发是一件需要非常小心的工作
  • 原文地址:https://www.cnblogs.com/tian-xie/p/7728288.html
Copyright © 2020-2023  润新知