首页 > 其他分享 >简简单单对比encodeURI与encodeURIComponent

简简单单对比encodeURI与encodeURIComponent

时间:2022-11-09 23:33:18浏览次数:70  
标签:E5% 简简单单 droidyue https encode encodeURIComponent com encodeURI


encodeURI和encodeURIComponent 是两个很相近的方法,用来encode URI。但是他们之间也存在着细微的差异,如果不能很好的理解这个差异,可能会导致一些不必要的麻烦。本文将尝试用最简单的形式展示这个差异。

encodeURI

  • encode所有的字符,除了下面的字符

Not Escaped:

A-Z a-z 0-9 ; , / ? : @ & = + $ – _ . ! ~ * ‘ ( ) #

encodeURIComponent

  • encode所有的字符,除了下面的字符

Not Escaped:

A-Z a-z 0-9 – _ . ! ~ * ‘ ( )

表现差异

encodeURIComponent encode的字符多于 encodeURI,即如下字符

, / ? : @ & = + $ #

使用场景差异

当encode内容作为 URI 的参数值时,使用encodeURIComponent

比如下面的例子



var linkOne = "https://droidyue.com/q=" + encodeURIComponent("安卓")
//encode后的内容 https://droidyue.com/q=%E5%AE%89%E5%8D%93

var deepLink = "droidyue://webview?url=" + encodeURIComponent("https://droidyue.com/?q=%E5%AE%89%E5%8D%93&from=direct")

//encode后的内容 droidyue://webview?url=https%3A%2F%2Fdroidyue.com%2F%3Fq%3D%25E5%25AE%2589%25E5%258D%2593%26from%3Ddirect

当encode的内容是独立的URI,不作为其他URI附属时,使用encodeURI



var linkTwo = encodeURI("https://droidyue.com/?q=安卓")
//encode后的内容 https://droidyue.com/?q=%E5%AE%89%E5%8D%93

错用会怎样

该用encodeURI,却使用了 encodeURIComponent

  • 导致连接无法被识别加载
encodeURIComponent("https://droidyue.com/?q=安卓")
//encode后的内容 https%3A%2F%2Fdroidyue.com%2F%3Fq%3D%E5%AE%89%E5%8D%93

该用encodeURIComponent 却使用了 encodeURI

  • 导致参数丢失
"droidyue://webview?url=" + encodeURI("https://droidyue.com/?q=%E5%AE%89%E5%8D%93&from=direct")
//encode后的内容 droidyue://webview?url=https://droidyue.com/?q=%25E5%25AE%2589%25E5%258D%2593&from=direct

如上​​from=direct​​​本属于​​https://droidyue.com/?q=%E5%AE%89%E5%8D%93&from=direct​​​,但是错误的encode后,反而属于了​​droidyue://webview?url=your_url&from=direct​​。

以上,希望有所帮助。

References


标签:E5%,简简单单,droidyue,https,encode,encodeURIComponent,com,encodeURI
From: https://blog.51cto.com/u_3987305/5838987

相关文章

  • encodeuricomponent有什么用?
    encodeuricomponent有什么用? 1、encodeuricomponent可把字符串作为URI组件进行编码。该方法不会对ASCII字母和数字进行编码,也不会对这些ASCII标点符号进行编码......
  • 给自己动力:一万小时定律。。简简单单的实现。。
    作家格拉德威尔在《异类》中指出“一万小时定律”,说的是一万小时的锤炼是从平凡变成大师的必要条件。可以具体量化:每天工作八个小时,一周工作五天,五年时间便可成该领域的专家......
  • pytorch 简简单单求个值
    能用张量处理就用张量,不要使用forin跑循环,一个是容易出错,一个是比较浪费时间,应用广播机制的话去做很容易的1.5使用mean处理平均值2.在处理梯度的时候无法更改自身......