因此,我正在研究一个使用网站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
似乎您希望将拆分的重点放在该位置的特定部分,而不是整个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');
拆分工作按预期进行:
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.searchParams
,decodeURIComponent
和其他本机API轻松地操作URL,您可能会以一种更简单,更安全的方式实现所需的内容;)