zoukankan      html  css  js  c++  java
  • JS的3个编码函数 escape() encodeURI() encodeURIComponent()

    1、escape()

    escape()是js编码函数中最古老的一个。虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起。

    实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,也就是说在Unicode字符集中,“春”是第6625个(十六进制)字符,“节”是第8282个(十六进制)字符。

    例如:

    javascript:escape("春节");
    //输出 "%u6625%u8282"
    
    javascript:escape("hello word");
    //输出 "hello%20word"

    还有两个地方需要注意。

    首先,无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符。也就是说,Javascipt函数的输入和输出,默认都是Unicode字符。这一点对下面两个函数也适用。

     javascript:escape("u6625u8282");
    //输出 "%u6625%u8282"
    
     javascript:unescape("%u6625%u8282");
    //输出 "春节"
    
     javascript:unescape("u6625u8282");
    //输出 "春节"

    其次,escape()不对“+”编码。但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。

    2、encodeURI()

    它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

    enter image description here

    它对应的解码函数是decodeURI()。

    enter image description here

    需要注意的是,它不对单引号'编码。

    3、encodeURIComponent()

    最后一个Javascript编码函数是encodeURIComponent()。与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

    因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。

    enter image description here

    它对应的解码函数是decodeURIComponent()。

    encodeURIComponent()相比encodeURI()要更加彻底。

    例如:

    <html>
    <body>
    
    <script type="text/javascript">
    
    var test1="http://www.haorooms.com/My first/";
    var nn=encodeURI(test1);
    var now=decodeURI(test1);
    
    
    var test1="http://www.haorooms.com/My first/";
    var bb=encodeURIComponent(test1);
    var nnow=decodeURIComponent(bb);
    
    </script>
    
    </body>
    </html>

    输出结果是:

    http://www.haorooms.com/My%20first/
    http://www.haorooms.com/My first/
    http%3A%2F%2Fwww.haorooms.com%2FMy%20first%2F
    http://www.haorooms.com/My first/

    总结

    escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"春节"的返回结果是%u6625%u8282,,escape()不对"+"编码 主要用于汉字编码,现在已经不提倡使用。

    encodeURI()是Javascript中真正用来对URL编码的函数。 编码整个url地址,但对特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。对应的解码函数是:decodeURI()。

    encodeURIComponent() 能编码"; / ? : @ & = + $ , #"这些特殊字符。对应的解码函数是decodeURIComponent()。

    假如要传递带&符号的网址,所以用encodeURIComponent()

  • 相关阅读:
    CSU 1333 Funny Car Racing
    FZU 2195 检查站点
    FZU 2193 So Hard
    ZOJ 1655 FZU 1125 Transport Goods
    zoj 2750 Idiomatic Phrases Game
    hdu 1874 畅通工程续
    hdu 2489 Minimal Ratio Tree
    hdu 3398 String
    洛谷 P2158 [SDOI2008]仪仗队 解题报告
    POJ 1958 Strange Towers of Hanoi 解题报告
  • 原文地址:https://www.cnblogs.com/eedc/p/12165222.html
Copyright © 2011-2022 走看看