一尘不染

在php中获取域名(不是子域名)

php

我的网址可以是以下任何一种格式:

http://example.com
https://example.com
http://example.com/foo
http://example.com/foo/bar
www.example.com
example.com
foo.example.com
www.foo.example.com
foo.bar.example.com
http://foo.bar.example.com/foo/bar
example.net/foo/bar

本质上,我需要能够匹配任何常规URL。我如何example.com
通过一个正则表达式从所有这些文件中提取(或.net,无论tld刚好是什么。我需要它与任何TLD一起使用)?


阅读 321

收藏
2020-05-29

共1个答案

一尘不染

好了,您可以parse_url用来获取主机:

$info = parse_url($url);
$host = $info['host'];

然后,您可以做一些有趣的事情,仅获取TLD和主机

$host_names = explode(".", $host);
$bottom_host_name = $host_names[count($host_names)-2] . "." . $host_names[count($host_names)-1];

不是很优雅,但应该可以。


如果您想要一个解释,请按照以下步骤进行:

首先,我们http://使用parse_url的功能来抓取方案之间的所有内容(,等等),…解析URL。:)

然后我们采用主机名,并根据句点所在的位置将其分成一个数组,因此test.world.hello.myname将变为:

array("test", "world", "hello", "myname");

之后,我们获取数组(4)中的元素数。

然后,我们从中减去2得到倒数第二个字符串(example在您的示例中,主机名或)

然后,我们从中减去1以获得最后一个字符串(因为数组键从0开始),也称为TLD

然后,我们将这两部分与一个句点结合起来,您便有了基本主机名。

2020-05-29