解码URIComponent和解码URI有什么区别?

2020/09/30 01:21 · javascript ·  · 0评论

JavaScript函数decodeURIComponentJavaScript有什么区别decodeURI

要解释这两者之间的差异让我解释之间的差异encodeURIencodeURIComponent

主要区别在于:

  • 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()

将输入转换为URL编码的字符串

encodeURI()

对输入进行URL编码,但是假定输入了完整的URL,因此通过不对协议(例如http://)和主机名(例如
www.stackoverflow.com)进行编码来返回有效的URL

decodeURIComponent()decodeURI()上面的相反

encodeURIComponent将解码URI特殊标记(例如&,?,#等),decodeURI则不会。

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

本文地址:http://javascript.askforanswer.com/jiemauricomponenthejiemauriyoushenmequbie.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!