如何将域名与 URL 隔离?
我正在寻找一种方法(或函数)来删除输入到函数中的任何 URL 的 example.ext
部分。 域名扩展名可以是任何内容(.com、.co.uk、.nl、.whatever),输入的 URL 可以是从 http://www.example.com
到www.example.com/path/script.php?=whatever
执行此操作的最佳方法是什么?
我想要 example.com
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
parse_url 将 URL 转换为关联数组:
parse_url turns a URL into an associative array:
您还可以编写正则表达式来获得您想要的结果。
这是我的尝试:
输出是:
此模式还考虑了“example.com.au”等域。
注:我没有查阅相关的RFC。
You can also write a regular expression to get exactly what you want.
Here is my attempt at it:
The output is:
This pattern also takes into consideration domains such as 'example.com.au'.
Note: I have not consulted the relevant RFC.
您可以使用 parse_url() 来执行此操作
:例如,$domain 应该包含 example.com,无论它是否有 www。 它也适用于 .co.uk 等域名
You can use parse_url() to do this:
In this example, $domain should contain example.com, irrespective of it having www or not. It also works for a domain such as .co.uk
以下代码将从绝对 URL 中删除协议、域和端口:
Following code will trim protocol, domain and port from absolute URL:
这里有几个简单的函数,可以从普通域或长域 (test.sub.domain.com) 或 url (http://www.example.com) 获取根域 (example.com)。
Here are a couple simple functions to get the root domain (example.com) from a normal or long domain (test.sub.domain.com) or url (http://www.example.com).
解决了这个问题...
假设我们正在调用 dev.mysite.com,并且我们想要提取“mysite.com”,
它也适用于 mysite.co.uk,所以应该可以在任何地方工作:)
Solved this...
Say we're calling dev.mysite.com and we want to extract 'mysite.com'
Works with mysite.co.uk too so should work everywhere :)
我花了一些时间思考使用正则表达式是否有意义,但最终我认为没有意义。
Firstresponder 的正则表达式几乎让我相信这是最好的方法,但它对任何缺少尾部斜杠的东西不起作用(所以 http:/例如,/example.com)。 我用以下代码修复了这个问题:
'/\w+\..{2,3}(?:\..{2,3})?(?=[\/\W])/i',但后来我意识到像 'http://example.com/index.htm< 这样的网址匹配两次/a>'。 哎呀。 这不会那么糟糕(只需使用第一个),但它也会匹配两次,如下所示: 'http://abc.ed.fg.hij.kl.mn/',第一个匹配项不正确。 :(
一位同事建议只获取主机(通过
parse_url()
),然后只获取最后两个或三个数组位(split()
on '. ')这两个或三个将基于域列表,例如“co.uk”等。组成该列表成为困难的部分。I spent some time thinking about whether it makes sense to use a regular expression for this, but in the end I think not.
firstresponder's regexp came close to convincing me it was the best way, but it didn't work on anything missing a trailing slash (so http://example.com, for instance). I fixed that with the following:
'/\w+\..{2,3}(?:\..{2,3})?(?=[\/\W])/i'
, but then I realized that matches twice for urls like 'http://example.com/index.htm'. Oops. That wouldn't be so bad (just use the first one), but it also matches twice on something like this: 'http://abc.ed.fg.hij.kl.mn/', and the first match isn't the right one. :(A co-worker suggested just getting the host (via
parse_url()
), and then just taking the last two or three array bits (split()
on '.') The two or three would be based on a list of domains, like 'co.uk', etc. Making up that list becomes the hard part.这个函数应该可以工作:
要使用它:
This function should work:
To use it:
提取域名部分的正确方法只有一种,那就是使用公共后缀列表(TLD 数据库)。 我推荐 TLDExtract 包,这里是示例代码:
There is only one correct way to extract domain parts, it's use Public Suffix List (database of TLDs). I recomend TLDExtract package, here is sample code: