Javascript 有人能告诉我为什么我们需要这个组件吗

Javascript 有人能告诉我为什么我们需要这个组件吗,javascript,encodeuricomponent,decodeuricomponent,Javascript,Encodeuricomponent,Decodeuricomponent,我有一段我找不到任何解释的代码。当我在谷歌上搜索decodeURIComponent时,它说它与encodeURIComponent相反,然而,我在代码中的任何地方都找不到encodeURIComponent getParameterByName = (name, url) => { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); con

我有一段我找不到任何解释的代码。当我在谷歌上搜索decodeURIComponent时,它说它与encodeURIComponent相反,然而,我在代码中的任何地方都找不到encodeURIComponent

getParameterByName = (name, url) => {
    if (!url)
       url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`),
    results = regex.exec(url);
    if (!results)
        return null;
    if (!results[2])
        return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
这是URL

有人能给我解释一下这个代码吗

,URI只能包含字符
-.~a-zA-Z0-9
:/?#[]@!$&'()*+,;=,其中后一组具有某些特殊含义。通过限制这些字符,URL被清晰地分隔(通常由空格或换行符分隔),并通过代理和其他无法处理非ASCII字符的服务生存

如果您填写GET表单,用户输入将被编码。例如,浏览器将请求

https://www.google.com/search?q=Hell%C3%B6+L%C3%A4天%26天%2天
您可以看到,所有非ASCII字符和符号(&)都已使用百分号和中字符的十六进制表示形式进行编码

空间字符处理方式不同;由于它在用户输入中非常常见,因此被分配了较短的字符
+
。这意味着
+
也必须进行百分比编码,以及
%2B

您拥有的代码从URL中提取GET参数
name
。如果有,最后一行

return decodeURIComponent(results[2].replace(/\+/g, ' '));
首先将空格的编码撤消为
+

然后用于获取name参数的值。例如,如果用户输入了
RenéMüller的名字&勒内穆勒
,浏览器将发送
name=Ren%C3%A9+M%C3%BCller%26%E5%8B%92%E5%86%85%E7%A9%86%E5%8B%92
,而
decodeURIComponent
将产生原始输入():


可能您正在
url
变量中接收已编码的字符串。我检查了window.location.href,但它不是encoded@JSLover-这只意味着输入的数据不包括任何需要编码的字符。不能保证将来不会有人输入编码字符。
> decodeURIComponent('Ren%C3%A9 M%C3%BCller%26%E5%8B%92%E5%86%85%E7%A9%86%E5%8B%92')
'René Müller&勒内穆勒'