zoukankan      html  css  js  c++  java
  • JavaScript--序列化以及转义

    一、序列化

      1.1 序列化

      将其他对象转换为字符串,用法:JSON.stringify()  

    var li = [1,2,3,4];
    var new_li = JSON.stringify(li);
    new_li;
    "[1,2,3,4]"
    

      1.2 反序列化

      将字符串转换为对象类型,用法:JSON.parse() 

    var s = '{"k1":"v1","k2":"v2"}';
    var new_key = JSON.parse(s);
    new_key;
    {k1: "v1", k2: "v2"}
    

      

    二、字符编码

      js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent。

      2.1 encodeURI()

      encodeURI() 函数可把字符串作为 URI 进行编码

      该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

      该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

    var s = "http://www.sogou.com/web?query=足球";
    undefined
    s
    "http://www.sogou.com/web?query=足球"
    new_s = encodeURI(s);
    "http://www.sogou.com/web?query=%E8%B6%B3%E7%90%83"
    

      2.2 decodeURI()

      对URI中编码的字符串解码 

    var s = 'http://www.sogou.com/web?query=%E8%B6%B3%E7%90%83'
    undefined
    s
    "http://www.sogou.com/web?query=%E8%B6%B3%E7%90%83"
    var new_uri = decodeURI(s)
    undefined
    new_uri
    "http://www.sogou.com/web?query=足球"
    

      2.3 encodeURIComponent()

      函数可把字符串作为 URI 组件进行编码。

      该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。  

      注:encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

    var s = "http://www.sogou.com/web?query=足球"
    undefined
    s
    "http://www.sogou.com/web?query=足球"
    var new_s = encodeURIComponent(s)
    undefined
    new_s
    "http%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E8%B6%B3%E7%90%83"
    

      2.4 decodeURIComponent()

       对编码的URI组件进行解码 

    encode_uri = "http%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E8%B6%B3%E7%90%83"
    "http%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E8%B6%B3%E7%90%83"
    new_uri = decodeURIComponent(encode_uri)
    "http://www.sogou.com/web?query=足球"
    

      2.5 escape()

      escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串

      该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。 

    url = "http://www.sogou.com/web?query=足球"
    "http://www.sogou.com/web?query=足球"
    new_url = escape(url)
    "http%3A//www.sogou.com/web%3Fquery%3D%u8DB3%u7403"
    

      2.5 unescape()

      对escape()编码进行解码  

    new_url
    "http%3A//www.sogou.com/web%3Fquery%3D%u8DB3%u7403"
    last_url = unescape(new_url)
    "http://www.sogou.com/web?query=足球"
    

      

    三、总结

      escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

      escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

    最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
      escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
      encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

      encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/bigberg/p/9290295.html
Copyright © 2011-2022 走看看