zoukankan      html  css  js  c++  java
  • 【转】escape,encodeURI,encodeURIComponent有什么区别?

    在这个页面里面试着搜了一下 「UTF-8」 ,居然没有搜到。

    escape 和 encodeURI 都属于 Percent-encoding,基本功能都是把 URI 非法字符转化成合法字符,转化后形式类似「%*」。它们的根本区别在于,
    escape 在处理 0xff 之外字符的时候,是直接使用字符的 unicode 在前面加上一个 「%u」,而encodeURI则是先进行 UTF-8,再在 UTF-8 的每个字节码前加上一个 「%」;
    在处理 0xff 以内字符时,编码方式是一样的(都是「%XX」,XX为字符的 16 进制 unicode,同时也是字符的 UTF-8),只是范围(即哪些字符编码哪些字符不编码)不一样。(杨易提醒)
    encodeURI 是W3C 的标准,而 Escape 是非标准。

    举一个例子:
    知乎的「知」字,可以知道它的 unicode 为 0x77e5,对它进行 UTF-8 编码,变成了三个字节:0xe7, 0x9f, 0xa5
    因此,如果是使用 escape 编码「知」,得到的结果就是 「%u77E5」;encodeURI 得到的结果则是 「%E7%9F%A5」

    Escape 的编码有一个弊端在于,它后面是 4 位 16 进制,故不支持基本多文种平面(BMP)外的字符(unicode 大于 0xffff)的字符;
    而 encodeURI 是基于 UTF-8 的,编码本身理论上可以支持 0x10ffff 内的字符(实际上现在的 JavaScript 不支持 BMP 外的字符,所以 encodeURI 也不支持 )。

    使用场景方面,也可以可以参考他的答案,但是不同意这一句:
    如果只是编码字符串,不和URL有半毛钱关系,那么用escape。

    encodeURI(Component) 一般用在 URI 上,但是不是一定就要用在 URL 上。比如如果 POST 请求的 Request Header 中 Content-Type 为「application/x-www-form-urlencoded」, 那么 Request Payload 里面的数据一般就是使用 encodeURI(Component) 编码的。(和 URL 的 querystring 一样)。

    如果没有必要,不要使用 escape。

    from:https://www.zhihu.com/question/21861899

  • 相关阅读:
    C++调试帮助
    C++中的前置(后置)++与--
    C++11 使用using定义类型别名
    C++11 尾置返回类型
    [BUUCTF]PWN——pwnable_hacknote
    [BUUCTF]PWN——ciscn_2019_es_7[详解]
    [BUUCTF]PWN——mrctf2020_easyoverflow
    [BUUCTF]PWN——wustctf2020_closed
    [BUUCTF]PWN——0ctf_2017_babyheap
    [BUUCTF]PWN——ciscn_2019_s_4
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/7286546.html
Copyright © 2011-2022 走看看