zoukankan      html  css  js  c++  java
  • 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编码,多用于对地址后的参数值进行编码
  • 相关阅读:
    关于使用easyui dataGrid遇到的小bug问题
    构造带清除按钮的combo
    ajax方式提交数据时“+”的处理
    JavaScript call方法
    stackoverflow上的一个关于传递类对象的问题
    经典回溯算法(八皇后问题)
    c++构造函数(初始化式)被忽略的东西
    跟着<<C++Primer 学set容器>>
    排序算法(内部排序)总结
    hosts文件无法修改的问题解决方案
  • 原文地址:https://www.cnblogs.com/tian-xie/p/7728288.html
Copyright © 2011-2022 走看看