首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >decodeURIComponent和decodeURI有什么区别?

问decodeURIComponent和decodeURI有什么区别?
EN

Stack Overflow用户
提问于 2009-04-14 13:48:20
回答 8查看 142.3K关注 0票数 427

JavaScript函数decodeURIComponent和decodeURI之间的区别是什么

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-04-14 14:03:29

为了解释这两者之间的区别,让我来解释一下encodeURI和encodeURIComponent之间的区别。

主要区别在于:

  • encodeURI函数用于完整URI。
  • encodeURIComponent函数用于..好吧..。URI组件,位于分隔符(;/?:@&=+$,#)之间的任何部分。

因此,在encodeURIComponent中,这些分隔符也是编码的,因为它们被视为文本,而不是特殊字符。

现在回到解码函数之间的区别,每个函数解码由其对应的编码副本生成的字符串,并负责特殊字符的语义及其处理。

票数 457
EN

Stack Overflow用户

发布于 2009-04-14 14:26:09

encodeURIComponent/decodeURIComponent()几乎总是您想要使用的对,用于连接和拆分URI部分中的文本字符串。

encodeURI的名字不太常见,也有误导性:它实际上应该被称为fixBrokenURI。它接受类似于URI但包含无效字符(如空格)的内容,并将其转换为真正的URI。它可以有效地修复来自用户输入的无效URI,还可以用于将IRI (URI中包含纯Unicode字符)转换为普通URI(使用%转义的UTF-8对非ASCII进行编码)。

当encodeURI实际上应该被命名为fixBrokenURI()时,decodeURI()同样可以被称为potentiallyBreakMyPreviouslyWorkingURI()。我想不出它在任何地方都有什么有效的用途;避免。

票数 126
EN

Stack Overflow用户

发布于 2009-04-14 14:04:28

代码语言:javascript
复制
js> s = "http://www.example.com/string with + and ? and & and spaces";
http://www.example.com/string with + and ? and & and spaces
js> encodeURI(s)
http://www.example.com/string%20with%20+%20and%20?%20and%20&%20and%20spaces
js> encodeURIComponent(s)
http%3A%2F%2Fwww.example.com%2Fstring%20with%20%2B%20and%20%3F%20and%20%26%20and%20spaces

看起来,encodeURI通过对空格和其他一些(例如,不可打印)字符进行编码来生成一个“安全的”URI,而encodeURIComponent另外还对冒号、斜杠和加号字符进行了编码,并打算在查询字符串中使用。+和?的编码和&在这里特别重要,因为它们是查询字符串中的特殊字符。

票数 74
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/747641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档