提问人:Satheesh 提问时间:10/26/2023 最后编辑:Jason AllerSatheesh 更新时间:10/26/2023 访问量:57
如何从将重定向 URL 作为 param 之一的 URL 中检索所有查询参数
How to retrieve all query params from the URL which has a redirect URL as one of param
问:
我有以下逻辑从应用程序 URL 检索查询 PARAM。但是,当存在具有自己的查询参数的 URL 作为查询参数时,此逻辑不起作用。示例如下
例如:https://test.domain.com?param1=a&ru=**https://url2.domain.com/?url2paramA=A&url2paramB=B**
在此示例中,url2param2 是 ru(重定向 URL) 的一部分。当我尝试检索 ru 参数时,它只给出包含第一个参数的 URL 部分。第二个查询参数被视为主 URL 的一部分。
电流逻辑
const getParameterByName = (name, search) => {
const match = RegExp('[?&]' + name + '=([^&]*)').exec(search);
try {
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
} catch {
return match && match[1];
}
};
var result = getParameterByName('ru', 'https://test.domain.com?param1=a&ru=https://url2.domain.com/?url2paramA=A&url2paramB=B');
console.log(result)
答:
1赞
zouabi
10/26/2023
#1
如评论中所述,您可以使用 URL
和 URLSearchParams
API:
const plainUrl = 'https://test.domain.com?param1=a&ru=https://url2.domain.com/?url2paramA=A&url2paramB=B';
const url = new URL(plainUrl);
const result = url.searchParams.get('ru');
console.log(result);
编辑:
如果要考虑作为 的一部分,则必须对第二个 URL 进行编码 URIComponent
:paramB
ru
const plainMainUrl = 'https://test.domain.com?param1=a';
const plainRedirectUrl = 'https://url2.domain.com/?url2paramA=A&url2paramB=B';
// option 1: manual
const plainUrl1 = `${plainMainUrl}&ru=${encodeURIComponent(plainRedirectUrl)}`;
const url1 = new URL(plainUrl1);
const result1 = url1.searchParams.get('ru');
// end option 1
// option 2: URLSearchParams#append
const url2 = new URL(plainMainUrl);
url2.searchParams.append('ru', plainRedirectUrl);
const result2 = url2.searchParams.get('ru');
// end option 2
console.assert(result1 === result2 && result2 === plainRedirectUrl);
console.log(result1);
2赞
Khoa
10/26/2023
#2
这是因为您的重定向 url 未编码
const getParameterByName = (name, search) => {
const match = RegExp('[?&]' + name + '=([^&]*)').exec(search);
try {
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
} catch {
return match && match[1];
}
};
const url = `https://test.domain.com/param1=a&ru=${encodeURIComponent('https://url2.domain.com/url2paramA=A&url2paramB=B')}`;
console.log(getParameterByName('ru', url))
评论
0赞
Satheesh
11/30/2023
我需要发送 RU 解码的 URL 值以进行一些分析以及登陆到目标应用程序。但我理解谁想要添加额外的参数,他们需要对其进行编码,这是唯一的方法
-1赞
Bhavin Gunjariya
10/26/2023
#3
您的代码运行良好,但是在此代码中,您使用正则表达式提取了 url,这就是您没有获得 after 的原因,但您需要在任何特殊字符(如给定 URL)之间传递重定向 URL。&
url2paramB=B
&
https://test.domain.com?param1=a&ru=**https://url2.domain.com/?url2paramA=A&url2paramB=B**
此 URL 包含一个特殊字符(两个星号()),因此您可以在这些星号()之间提取重定向 URL。**
*
试试这个代码:
const getParameterByName = (name, search) => {
const match = RegExp(`${name}=\\*{2}(.*?)\\*{2}`).exec(search);
return match ? match[1] : null;
};
var result = getParameterByName('ru', 'https://test.domain.com?param1=a&ru=**https://url2.domain.com/?url2paramA=A&url2paramB=B**');
console.log(result)
评论
0赞
Satheesh
10/26/2023
RU URL 是在重定向时添加的内容,如果未经外部团队身份验证。不能要求每个团队在一些特殊字符之间添加网址
0赞
Bergi
10/27/2023
@Satheesh 为什么需要要求团队添加特殊字符?您问题中的网址已经包含它们
0赞
Bhavin Gunjariya
10/27/2023
是的,您提供的 URL 已经包含特殊字符
0赞
Satheesh
11/30/2023
纠正了它...在尝试设置粗体的同时通过在编辑器中设置格式来添加。
评论