如何忽略无效的 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 的一部分。目前,如果 & 字符未附加到有效参数(urlslug),则会被忽略。

我曾尝试使用 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
     }
 }