JavaScript函数decodeURIComponent和decodeURI之间的区别是什么
发布于 2009-04-14 14:03:29
为了解释这两者之间的区别,让我来解释一下encodeURI和encodeURIComponent之间的区别。
主要区别在于:
encodeURI函数用于完整URI。encodeURIComponent函数用于..好吧..。URI组件,位于分隔符(;/?:@&=+$,#)之间的任何部分。因此,在encodeURIComponent中,这些分隔符也是编码的,因为它们被视为文本,而不是特殊字符。
现在回到解码函数之间的区别,每个函数解码由其对应的编码副本生成的字符串,并负责特殊字符的语义及其处理。
发布于 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()。我想不出它在任何地方都有什么有效的用途;避免。
发布于 2009-04-14 14:04:28
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另外还对冒号、斜杠和加号字符进行了编码,并打算在查询字符串中使用。+和?的编码和&在这里特别重要,因为它们是查询字符串中的特殊字符。
https://stackoverflow.com/questions/747641
复制相似问题