zoukankan      html  css  js  c++  java
  • JS转码与解码

    escape 和 unescape

    escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值

    采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z。

    escape()函数用于js对字符串进行编码

    encodeURI 和 decodeURI

    把URI字符串采用UTF-8编码格式转化成escape各式的字符串。
    encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

    encodeURI()用于整个url编码

    encodeURIComponent 和 decodeURIComponent

    与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

    因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。把URI字符串采用UTF-8编码格式转化成escape格式的字符串。

    encodeURIComponent() 用于参数的传递,参数包含特殊字符可能会造成间断

    总结

    escape编码字符串

    简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。
    编码之后的效果是%XX或者%uXXXX这种形式。
    其中 ASCII字母 数字 @*/+ 等字符不会被编码,其余的都会。
    最关键的是,当需要对URL编码时,忘记这个方法,这个方法是针对字符串使用的,不适用于URL。

    URL编码encodeURI和encodeURIComponent

    对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。它们都是编码URL,唯一区别就是编码的字符范围,其中

    encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'
    encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()'
    所以encodeURIComponent比encodeURI编码的范围更大。
    实际例子来说,encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。
     
    如果只是编码字符串,不和URL有半毛钱关系,那么用escape。

    如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。
    比如
    encodeURI("http://www.cnblogs.com/some other thing");

    编码结果:

    http://www.cnblogs.com/some%20other%20thing

    其中,空格被编码成了%20。但是如果用了encodeURIComponent,那么结果变为

    http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing

    连 "/" 都被编码了,整个URL已经没法用了。

    当需要编码URL中的参数的时候,那么encodeURIComponent是最好方法

    var param = "http://www.cnblogs.com/"; //param为参数
    param = encodeURIComponent(param);
    var url = "http://www.cnblogs.com?next=" + param;
    console.log(url) //"http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2F"

    参数中的 "/" 可以编码,如果用encodeURI肯定要出问题,因为后面的/是需要编码的。

    参考:

    https://www.cnblogs.com/lvmylife/p/7595036.html

    https://www.cnblogs.com/moranhuishou/p/6209387.html

  • 相关阅读:
    关于C++类中的静态数据成员
    关于C++中char,sizeof,strlen,string
    C++学习笔记(7)
    C++学习笔记(6)
    C++学习笔记(指针)
    C++学习笔记(4)
    UVA 10780
    UVA 531
    HDU, 3579 Hello Kiki
    UVA, 10413 Crazy Savages
  • 原文地址:https://www.cnblogs.com/aeolian/p/12133598.html
Copyright © 2011-2022 走看看