如何忽略无效的 URL 参数?
How to ignore invalid URL parameters?
在继续之前,让我先声明一下,我已经查看了很多主题,但找不到适合我的答案。
基本上,我已经构建了一个自定义的 link 缩短器,我正在使用 URLSearchParams 来缩短 URL 和 [=44 中的自定义 slug =] 搜索查询如下:
var e = window.location.search;
const urlParams = new URLSearchParams(e);
const url = urlParams.get("url");
const slug = urlParams.get("slug");
查询格式为:?url=https://google.com&slug=customslug
处理参数后,URL 字符串会用 trim()
处理以删除任何空格。当调用我正在使用的 API (https://short.io) 时,最终输出使用 encodeURIComponent()
编码。
但是,我希望能够将 URL 传递给 &
,就像这样:?url=https://google.com/&testing&slug=customslug
。我理想的解决方案是将不属于 &slug
参数的任何 &
视为包含在 &url
参数中的 URL 的一部分。目前,如果 &
字符未附加到有效参数(url
或 slug
),则会被忽略。
我曾尝试使用 encodeURIComponent()
对查询输入进行编码,但这会导致无法获取任一定义的参数。我也尝试过使用 split("&slug",1)
拆分输入,但这会产生一个数组,我无法将数组传递给 Short.io API.
有什么建议吗?
您应该使用 URL 编码的符号 %26
。
var e = "?url=https://google.com/%26testing&slug=customslug";
const urlParams = new URLSearchParams(e);
const url = urlParams.get("url");
const slug = urlParams.get("slug");
console.log(url);
console.log(slug);
我根据@CherryDT 关于使用 window.location.hash
获取我的 URL 字符串的评论解决了我的问题。最终,我选择放弃地址栏中的 slug 的想法,因为它会导致我的脚本出现更多问题。
虽然此解决方案仅适用于我的目的,但我将详细说明该解决方案,因为它可以解决无法对地址栏中传递的 URL 字符串进行编码的问题。有一天可能对某人有用。
var e = window.location.href.replace(window.location.hash, '');
if (e.endsWith("?") === true) {
var url = window.location.hash.substr(1);
if (url === "") {
// Error code
} else {
console.log("A URL to be shortened was provided via hash.");
// Pass url to rest of script
}
}
在继续之前,让我先声明一下,我已经查看了很多主题,但找不到适合我的答案。
基本上,我已经构建了一个自定义的 link 缩短器,我正在使用 URLSearchParams 来缩短 URL 和 [=44 中的自定义 slug =] 搜索查询如下:
var e = window.location.search;
const urlParams = new URLSearchParams(e);
const url = urlParams.get("url");
const slug = urlParams.get("slug");
查询格式为:?url=https://google.com&slug=customslug
处理参数后,URL 字符串会用 trim()
处理以删除任何空格。当调用我正在使用的 API (https://short.io) 时,最终输出使用 encodeURIComponent()
编码。
但是,我希望能够将 URL 传递给 &
,就像这样:?url=https://google.com/&testing&slug=customslug
。我理想的解决方案是将不属于 &slug
参数的任何 &
视为包含在 &url
参数中的 URL 的一部分。目前,如果 &
字符未附加到有效参数(url
或 slug
),则会被忽略。
我曾尝试使用 encodeURIComponent()
对查询输入进行编码,但这会导致无法获取任一定义的参数。我也尝试过使用 split("&slug",1)
拆分输入,但这会产生一个数组,我无法将数组传递给 Short.io API.
有什么建议吗?
您应该使用 URL 编码的符号 %26
。
var e = "?url=https://google.com/%26testing&slug=customslug";
const urlParams = new URLSearchParams(e);
const url = urlParams.get("url");
const slug = urlParams.get("slug");
console.log(url);
console.log(slug);
我根据@CherryDT 关于使用 window.location.hash
获取我的 URL 字符串的评论解决了我的问题。最终,我选择放弃地址栏中的 slug 的想法,因为它会导致我的脚本出现更多问题。
虽然此解决方案仅适用于我的目的,但我将详细说明该解决方案,因为它可以解决无法对地址栏中传递的 URL 字符串进行编码的问题。有一天可能对某人有用。
var e = window.location.href.replace(window.location.hash, '');
if (e.endsWith("?") === true) {
var url = window.location.hash.substr(1);
if (url === "") {
// Error code
} else {
console.log("A URL to be shortened was provided via hash.");
// Pass url to rest of script
}
}