我有这段代码,找不到任何解释。当我用谷歌的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 http:// localhost:8000 / restaurant.html?id = 2
因此,有人可以为我解释此代码。
如RFC 3986中所定义,URI仅可包含字符-_.~a-zA-Z0-9
和:/?#[]@!$&'()*+,;=
,其中后者具有某些特殊含义。通过限制使用这些字符,可以清楚地分隔URL(通常用空格或换行符),并且可以通过代理和其他服务处理非ASCII字符时遇到困难。
如果填写GET表单,则将对用户输入进行编码。例如,如果您搜索Hellö Lädies&Gentlemen+Bob
,浏览器将要求
https://www.google.com/search?q=Hell%C3%B6+L%C3%A4dies%26Gentlemen%2BBob
您会看到所有非ASCII字符和&符号都已使用百分号和UTF-8编码的字符的十六进制表示进行了编码。
空格字符的处理方式有所不同;由于它在用户输入中非常常见,因此被分配了较短的字符+
。这意味着+
还必须进行百分比编码%2B
。
您拥有的代码name
从URL中提取GET参数。如果在那里,最后一行
return decodeURIComponent(results[2].replace(/\+/g, ' '));
首先撤消将空格编码为+
。
decodeURIComponent
然后用于获取name参数的值。例如,如果用户输入了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
并将产生原始输入(您可以自己尝试):
> decodeURIComponent('Ren%C3%A9 M%C3%BCller%26%E5%8B%92%E5%86%85%E7%A9%86%E5%8B%92')
'René Müller&勒内穆勒'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句