前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简简单单对比encodeURI与encodeURIComponent

简简单单对比encodeURI与encodeURIComponent

作者头像
技术小黑屋
发布2020-01-21 14:49:30
8110
发布2020-01-21 14:49:30
举报
文章被收录于专栏:技术小黑屋技术小黑屋

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

比如下面的例子

1 2 3 4 5 6

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

1 2

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

错用会怎样

该用encodeURI,却使用了 encodeURIComponent

  • 导致连接无法被识别加载

1 2

encodeURIComponent("https://droidyue.com/?q=安卓") //encode后的内容 https%3A%2F%2Fdroidyue.com%2F%3Fq%3D%E5%AE%89%E5%8D%93

该用encodeURIComponent 却使用了 encodeURI

  • 导致参数丢失

1 2

"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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • encodeURI
  • encodeURIComponent
  • 表现差异
  • 使用场景差异
    • 当encode内容作为 URI 的参数值时,使用encodeURIComponent
      • 当encode的内容是独立的URI,不作为其他URI附属时,使用encodeURI
      • 错用会怎样
        • 该用encodeURI,却使用了 encodeURIComponent
          • 该用encodeURIComponent 却使用了 encodeURI
          • References
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档