JavaScript函数decodeURIComponent
和JavaScript有什么区别decodeURI
?
JavaScript函数decodeURIComponent
和JavaScript有什么区别decodeURI
?
Answers:
要解释这两者之间的差异让我解释之间的差异encodeURI
和encodeURIComponent
。
主要区别在于:
encodeURI
功能旨在用于完整的URI。encodeURIComponent
函数旨在在..好.. URI组件上使用,该组件是位于分隔符(; /?:@&= + $,#)之间的任何部分。因此,在encodeURIComponent
这些分隔符中进行编码也是因为它们被视为文本而不是特殊字符。
现在回到解码功能之间的区别,每个功能都在考虑特殊字符的语义及其处理的情况下,解码由其对应的编码对象生成的字符串。
encodeURIComponent / decodeURIComponent()几乎总是您要使用的对,用于将URI部分中的文本字符串连接在一起并分开。
encodeURI不太常见,并且具有误导性:它实际上应该称为fixBrokenURI。它所使用的内容几乎是URI,但其中包含无效字符(例如空格),然后将其转换为真实的URI。它可以有效地修复来自用户输入的无效URI,还可以用于将IRI(带有裸Unicode字符的URI)转换为纯URI(使用%转义的UTF-8编码非ASCII) )。
除一些特殊字符外,decodeURI解码与decodeURIComponent相同的字符。它被提供为encodeURI的逆函数,但是您仍然不能指望它返回与您最初输入的相同的内容(请参见例如。decodeURI(encodeURI('%20 '));
。
在真正将encodeURI命名为fixBrokenURI()的地方,decodeURI()可以等同地称为潜在地BreakingMyPreviouslyWorkingURI()。我认为在任何地方都没有有效的用途。避免。
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
另外对冒号,斜杠和加号字符进行编码,并打算在查询字符串中使用。+和?的编码 和&在这里特别重要,因为它们是查询字符串中的特殊字符。
由于我有相同的问题,但在这里找不到答案,因此我进行了一些测试,以找出实际的区别。我这样做是因为我需要某种与URL / URI不相关的编码。
encodeURIComponent("A")
返回“ A”,它不会将“ A”编码为“%41”decodeURIComponent("%41")
返回“ A”。encodeURI("A")
返回“ A”,它不会将“ A”编码为“%41”decodeURI("%41")
返回“ A”。-这意味着即使它们没有对字母数字字符进行编码,它们也可以对其进行解码。然而...
encodeURIComponent("&")
返回“%26”。decodeURIComponent("%26")
返回“&”。encodeURI("&")
返回“&”。decodeURI("%26")
返回“%26”。即使encodeURIComponent不能对所有字符进行编码,decodeURIComponent仍可以解码%00和%7F之间的任何值。
注意:看来,如果您尝试解码%7F以上的值(除非它是unicode值),则脚本将失败,并显示“ URI错误”。
encodeURIComponent未转义:
A-Z a-z 0-9 - _ . ! ~ * ' ( )
encodeURI()未转义:
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";