Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么decodeURI解码的字符比它应该解码的多?_Javascript_Urlencode - Fatal编程技术网

Javascript 为什么decodeURI解码的字符比它应该解码的多?

Javascript 为什么decodeURI解码的字符比它应该解码的多?,javascript,urlencode,Javascript,Urlencode,我刚刚读了一篇关于decodeURI(,)的文章,有一件事引起了我的注意: encodeURI不可能引入的转义序列不会被替换 因此,它应该只对encodeURI编码的字符进行解码 //所有这些都不应该由'encodeURI'转义。 const unescaped=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789-!~*”()/?:@&=+$,#”; 常量数据=[…未扫描].map(字符=>({ “char”:char,

我刚刚读了一篇关于decodeURI(,)的文章,有一件事引起了我的注意:

encodeURI不可能引入的转义序列不会被替换

因此,它应该只对
encodeURI
编码的字符进行解码

//所有这些都不应该由'encodeURI'转义。
const unescaped=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789-!~*”()/?:@&=+$,#”;
常量数据=[…未扫描].map(字符=>({
“char”:char,
“encodeURI(char)”:encodeURI(char),
“encodePercent(char)”:encodePercent(char),
“decodeURI(encodePercent(char))”:decodeURI(encodePercent(char))
}));
控制台.表格(数据);
log(“检查浏览器的控制台”);
函数编码百分比(字符串){
返回字符串.replace(//g,char=>“%”+char.charCodeAt(0.toString(16));

}
本规范规定了以下步骤:

  • 让unescapedURISet是一个字符串,其中包含在uriReserved和UriUneScape plus中有效的每个代码单元的一个实例“#”
  • 让我们看看,瞧:

    乌里保留:::其中一个

    ; / ? : @ & = + $ ,
    
    然后执行以下步骤:

  • 返回编码(uriString,unescapedURISet)
  • 中的所有内容都对字符串进行编码,但unescapedURISet中的字符除外,其中包括
    ;/?:@&=+$

    这意味着,
    encodeURI
    永远不能为uriReserved和uriUnescaped中的任何内容引入转义序列

    有趣的是,
    decodeURI
    的定义如下:

  • 设reservedURISet是一个字符串,其中包含在uriReserved plus“#”中有效的每个代码单元的一个实例

  • 返回解码(uriString、reservedURISet)

  • 工作原理类似于编码和解码除reservedURISet中的字符外的所有内容。显然,只有保留的字符被排除在解码之外。而这些恰好是
    ;/?:@&=+$


    问题仍然是为什么该标准规定了这一点。如果他们将uriUnescaped包括在reservedURISet中,那么其行为将完全符合引言中所述。可能是错误?

    规范说明了以下步骤:

  • 让unescapedURISet是一个字符串,其中包含在uriReserved和UriUneScape plus中有效的每个代码单元的一个实例“#”
  • 让我们看看,瞧:

    乌里保留:::其中一个

    ; / ? : @ & = + $ ,
    
    然后执行以下步骤:

  • 返回编码(uriString,unescapedURISet)
  • 中的所有内容都对字符串进行编码,但unescapedURISet中的字符除外,其中包括
    ;/?:@&=+$

    这意味着,
    encodeURI
    永远不能为uriReserved和uriUnescaped中的任何内容引入转义序列

    有趣的是,
    decodeURI
    的定义如下:

  • 设reservedURISet是一个字符串,其中包含在uriReserved plus“#”中有效的每个代码单元的一个实例

  • 返回解码(uriString、reservedURISet)

  • 工作原理类似于编码和解码除reservedURISet中的字符外的所有内容。显然,只有保留的字符被排除在解码之外。而这些恰好是
    ;/?:@&=+$


    问题仍然是为什么该标准规定了这一点。如果他们将uriUnescaped包括在reservedURISet中,那么其行为将完全符合引言中所述。可能是个错误?

    但是它怎么能介绍其余的角色呢?例如,
    A
    ?@更改了,我更新了我的答案。从技术上讲,它现在应该能回答你的问题,但我不知道他们为什么这样定义。如果没有人能解释为什么会这样,我会接受你的回答。但它如何能介绍其余的角色呢?例如,
    A
    ?@更改了,我更新了我的答案。从技术上讲,它现在应该能回答你的问题,但我不知道他们为什么这样定义它。如果没有人能解释为什么,我会接受你的答案。