获取当前 URL 但不包含 http:// 部分的书签!

15

大家好,我有一个问题,希望你们能够帮助我。我有一个书签;

javascript:q=(document.location.href);void(open('http://other.example.com/search.php?search='+location.href,'_self ','resizable,location,menubar,toolbar,scrollbars,status'));

现在我使用一个书签工具,它会将当前网页的URL发送到另一个网站进行搜索。但该工具会将整个URL(包括 http://)都发送过去进行搜索。现在,我想修改该书签工具,只发送 www.example.com 或者 example.com(不包含 http://),并进行搜索。请问是否可以实现,并请求您的帮助?

谢谢!

6个回答

32

1
谢谢,非常直接简单 :) - Tarun Nagpal

13

这应该可以解决问题

location.href.replace(/https?:\/\//i, "")

这个方法99%的情况下都是有效的。但是,如果当前的URL是例如http://somesite.com/query=http://someothersite.com/blahblah,那么它就不起作用了。所有的“http://”都会被替换,而不仅仅是第一次出现的。对于“https://”也不起作用。 - o.k.w
3
已修复。处理了http/https并进行了大小写不敏感匹配。此外,仅替换第一次出现的内容。 - jitter

4

使用document.location.host代替document.location.href。它只包含主机名而不是完整的URL。


我不确定为什么世界上的每个人都建议使用正则表达式,而当地点对象已经像Gumbo所建议的那样为您完成了它。文档是一个很好的东西:https://developer.mozilla.org/En/DOM/Window.location - epascarello
1
哦,使用“str = location.host + location.path + location.search”更容易。那端口号呢? - o.k.w
1
@o.k.w:Bostjan 显然只想知道主机而不是完整的 URL。 - Gumbo

0

使用URL API

获取URL一部分的现代方式是根据给定的URL创建URL对象。

const { hostname } = new URL('https://www.some-site.com/test'); // www.some-site.com 

当然,您可以将窗口位置或任何其他URL作为参数传递给URL构造函数。

像这样

const { hostname } = new URL(document.location.href);

-1
你是否对 other.example.com 有控制权?这应该在服务器端完成。
在这种情况下:
preg_replace("/^https?:\/\/(.+)$/i","\\1", $url);

应该可以工作。或者,您可以使用str_replace(...),但请注意,这可能会从URL的某个位置剥离掉“http://”:

str_replace(array('http://','https://'), '', $url);

编辑:或者,如果您只想要主机名,您可以尝试 {{link1:parse_url(...)}}?


这是一个 JavaScript 问题;这些是 PHP 函数。 - mAAdhaTTah

-1

使用 JavaScript 通过正则表达式匹配来使用 replace

javascript:q=(document.location.href.replace(/(https?|file):\/\//,''));void(open('http://website.com/search.php?search='+q,'_self ','resizable,location,menubar,toolbar,scrollbars,status'));

将 (https?|file) 替换为您选择的内容,例如 ftp、gopher、telnet 等。


实际上,这对于文件不起作用,因为该协议使用三个斜杠。 - jitter
@jitter: “file” 不应该被包含在内,它没有实际用途。我在本地测试代码时添加了它。不过,这并不重要 :) - o.k.w

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接