Javascript URLSearchParams返回的字符串与在URL';s参数

Javascript URLSearchParams返回的字符串与在URL';s参数,javascript,Javascript,这至少是镀铬的。如果我的窗口的URL是https://www.google.com/search?q=JavaScript+URLSearchParams,我在JavaScript控制台中运行: url = new URL(document.URL); urlsp = url.searchParams; console.log(urlsp.get("q")); 然后,登录到控制台的不是JavaScript+urlsearchparms,而是JavaScript urlsearchparms。这

这至少是镀铬的。如果我的窗口的URL是
https://www.google.com/search?q=JavaScript+URLSearchParams
,我在JavaScript控制台中运行:

url = new URL(document.URL);
urlsp = url.searchParams;
console.log(urlsp.get("q"));
然后,登录到控制台的不是
JavaScript+urlsearchparms
,而是
JavaScript urlsearchparms
。这是一种痛苦,因为我试图编写的userscript需要访问
q
参数的实际值<浏览器对代码>和
+
的处理方式不同。当然,我可以编写一些将URL作为字符串进行处理的代码,但这将是冗长且容易出错的。参数中的值
%3A
也会发生同样的情况,但它会返回为
。如何让URLSearchParams返回URL参数的实际值

url = new URL(document.URL);
urlsp = url.searchParams;
console.log(encodeURI(urlsp.get("q")));

我可以编写一些将URL作为字符串处理的代码,但是 这将是乏味和容易出错的

我不知道,这是一个相当新的API,我们已经很长时间没有它了。无论如何,它也有问题,上次我检查时,API不支持参数数组,如
foo[]=1&foo[]=2
。这其实并不复杂,也不需要太多代码来实现:

类urlparms{
构造函数(搜索){
this.qs=(search | | location.search).substr(1);
this.params={};
this.parseQuerstring();
}
parseQuerstring(){
这个.qs.split('&').reduce((a,b)=>{
让[key,val]=b.split('=');
a[键]=val;
返回a;
},这是params);
}
获取(键){
返回此.params[key];
}
}
constparams=newurlparms(“?q=Javascript+Stuff”);

log(params.get('q'))
URLSearchParams
是已解析搜索参数的表示形式。解析()包括对值进行解码


如果您不想解析搜索参数,而只是在符号上拆分,则不要使用
url.searchParams
。改为使用
url。搜索
,然后自己执行拆分。

您真的需要在url中编码实际值或安全值吗?如果您只需要将url搜索参数重写为一个新的url,您只需要调用函数encodeURIComponent(urlsp.get(“q”)),我认为这是行不通的。URL中的空格是
%20
而不是
+
。Javascript的encode函数错误地将所有空格更改为
%20
。不过,在URL的参数部分,
+
被视为空格。另外,@Melab,
Javascript+URLSearchParams
不是该值。这是编码值。实际值正确地为
JavaScript URLSearchParams
encodeURIComponent
将修复其他字符,如%3A,只需在修复空格后执行即可。@Xavero我需要实际值
encodeURIComponent(urlsp.get(“q”))
不这样做。不,不是。实际值是一个空格。它被编码为+符号,因为URL不能有空格。您可能会看到一个
+
,但这不是值,而是它的编码值。问题是您奇怪地试图处理编码值而不是实际值。您说您需要该值,但实际上您正在尝试获取一个编码值。对于%3A也是如此。您说需要该值,但%3A不是URL中的值。这是您想要的编码字符。从URL获取编码值的唯一方法是,猜猜看,重新编码URL。