【发布时间】:2021-11-04 15:22:05
【问题描述】:
在我继续之前,让我说我已经查看了许多线程,但找不到适合我的答案。
基本上,我已经构建了一个自定义链接缩短器,并且我正在使用 URLSearchParams 来提取要缩短的 URL 以及来自 URL 搜索查询的自定义 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。
有什么建议吗?
【问题讨论】:
-
我不确定我是否完全遵循 - 您需要使用
encodeURIComponent编码 各个部分(url、slug),而不是全部。 (或者使用URLSearchParams/URL也用于创建查询字符串,它会为你处理。) -
@CherryDT 我不知道如何在不编码整个字符串的情况下对字符串的各个部分进行编码。你有例子吗?
-
console.log(`https://your-service.com/?url=${encodeURIComponent(url)}&slug=${encodeURIComponent(slug)}`)- 或const result = new URL('https://your-service.com'); result.searchParams.set('url', url); result.searchParams.set('slug', slug); console.log(result.toString());- 假设变量url和slug具有此处的相关值 - 这就是应该如何生成到您的服务的正确链接,那么您将没有再次将url和slug从searchParams中取出时出现问题。 -
@CherryDT 这非常适合组装 URL,但它不能解决编码问题。输出仍然缺少与符号后的
url部分。 -
No...如果URL组装正确,以后解码后就不会遗漏任何东西。我刚刚解释的方法将生成一个正确编码的 URL,如
https://your-service.com/?url=https%3A%2F%2Fgoogle.com%2F%26testing&slug=customslug。而new URL('https://your-service.com/?url=https%3A%2F%2Fgoogle.com%2F%26testing&slug=customslug').searchParams.get('url')复制https://google.com/&testing就好了。
标签: javascript url urlencode urlsearchparams