encodeURI和encodeURIComponent之间的区别

  • Post author:
  • Post category:其他




encodeURI与encodeURIComponent之间的区别和适用场景


相同与不同

: encodeURI和encodeURIComponent作用对象都是URL,唯一的区别是编码的字符范围

  • encodeURI不会对以下字符进行编码

    ASCII字母 数字 ~!@#$&*()=:/,;?+’
  • encodeURIComponent方法不会对以下字符编码

    ASCII字母 数字 ~!*()’


结论

:encodeURIComponent 比 encodeURI的编码范围更大。

例如:encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。


适用场景



encodeURI

编码后url仍可以适用而,即如果还需要使用改URL进行网络传输则可以使用encodeURI。例如URL出现了中文,中文在网络中无法直接传输,则URL需要编码。

(事实上,我们在浏览器中输入一个含有中文参数的URL,在发出请求后,会自动使用encodeURI进行编码。所以有的带中文的url在浏览器可以使用,而在小程序中用不了,大概也是这个原因)

encodeURI("http://www.cnblogs.com/season-huang/some other thing");
//encodeURI编码后会变为(空格被编码成了%20)
"http://www.cnblogs.com/season-huang/some%20other%20thing";
//encodeURIComponent编码后会变为(连 "/" 都被编码了,整个URL已经没法用了)
"http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"

对于带参数URL进行编码使用

encodeURIComponent

更好。这个作为参数的URL中会包含:/?=&这些字符,如果不加处理,会解析错误

const uri = 'https://www.test.com/person/index.asp?name=张三&age=12'
encodeURI(uri)          // "https://www.test.com/person/index.asp?name=%E5%BC%A0%E4%B8%89&age=12"
encodeURIComponent(uri) // "https%3A%2F%2Fwww.test.com%2Fperson%2Findex.asp%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D12"

  • 为了避免服务器收到不可预知的请求,对任何用户输入的作为 URI 部分的内容你都需要用 encodeURIComponent 进行转义。
  • 比如,一个用户可能会输入”Thyme &time=again”作为comment变量的一部分。如果不使用

    encodeURIComponent 对此内容进行转义,服务器得到的将是comment=Thyme%20&time=again。
  • 请注意,”&“符号和”=”符号产生了一个新的键值对,所以服务器得到两个键值对(一个键值对是comment=Thyme,另一个则是time=again),而不是一个键值对。
  • 对于 application/x-www-form-urlencoded (POST) 这种数据方式,空格需要被替换成

    ‘+’,所以通常使用 encodeURIComponent 的时候还会把 “%20” 替换为 “+”。

参考:

escape,encodeURI,encodeURIComponent有什么区别? – 大黄的回答 – 知乎

https://www.zhihu.com/question/21861899/answer/20300871



https://www.cnblogs.com/hdxg/p/17077467.html



版权声明:本文为qq_43583887原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。