问题拆分代码位于'%2F',而不是'/'

问题描述 投票:0回答:2

因此,我正在研究一个使用网站URL的书签,该URL中包含实际文本'%2F',然后在其中进行分割。但是,由于%2F表示正斜杠,因此它会在存在正斜杠的位置而不是%2F处继续拆分。我该如何解决?

当前代码:

javascript:(
    function(){
        var str = window.location.href;
        var res = str.split("%2F");
        alert(res); //Just here to test the output
    }
)
();

示例输入:http://blocked.com-default.ws/?oI=14697520135&type=chromium-m&url=i.imgur.com%2F4uHAdNPg.jpg

示例输出:http:,, blocked.com-default.ws/?oI=14697520135&type=chromium-m&url=i.imgur.com%2F4uHAdNPg.jpg

想要的输出:http://blocked.com-default.ws/?oI=14697520135&type=chromium-m&url=i.imgur.com,4uHAdNPg.jpg

javascript bookmarklet
2个回答
0
投票

似乎您希望将拆分的重点放在该位置的特定部分,而不是整个URL。在您的情况下,您似乎真的想分割url中的window.location.search变量的值。如果仅使用它而不是window.location.href,则可能可以完成所需的关闭操作。

[更好的方法可能是针对url变量的实际值。如果不需要支持IE,获取数据的一种简单方法是使用UrlSearchParams

const params = new URLSearchParams(window.location.search);
const url = params.get("url");
const res = url.split('%2F');

如果您确实需要更多的跨浏览器访问范围,也可以使用简单的正则表达式:

const url = window.location.search.match(/url=[^&]+/)
const res = url.split('%2F');

0
投票

拆分工作按预期进行:

const str = 'http://blocked.com-default.ws/?oI=14697520135&type=chromium-m&url=i.imgur.com%2F4uHAdNPg.jpg';
console.log(str.split('%2F'));

但是window.location.href并不总是返回与地址栏中显示的完全相同的字符串,或者在您不知情的情况下对内容进行编码。这是非常依赖于浏览器的。例如,在chrome上,您可能会观察到以下内容:

location.href = 'http://example.com/ xxx';
console.log(location.href); // http://example.com/%20xxx

在任何情况下,看起来您都在尝试手动操纵URL。不要那样做通过使用new URL(...)location.searchParamsdecodeURIComponent和其他本机API轻松地操作URL,您可能会以一种更简单,更安全的方式实现所需的内容;)

© www.soinside.com 2019 - 2024. All rights reserved.