剥离包含域的URL的字符串,并包含子域(如果可用)

时间:2015-09-08 14:23:40

标签: php url

目前,我可以通过以下方式删除网址字符串的域名:

$pattern = '/\w+\..{2,3}(?:\..{2,3})?(?:$|(?=\/))/i';
$url = 'http://www.example.com/foo/bar?hat=bowler&accessory=cane';
if (preg_match($pattern, $url, $matches) === 1) {
    echo $matches[0];
}

这将回应:

example.com

问题是我想要包含子域(如果存在)

例如:

$url = 'http://sub.domain.example.com/foo/bar?hat=bowler&accessory=cane';

应该回应:

sub.domain.example.com

我怎样才能实现这种疯狂?

1 个答案:

答案 0 :(得分:4)

您可以使用parse_url()功能:

$str = 'http://sub.domain.example.com/foo/bar?hat=bowler&accessory=cane';
$parts = parse_url($str);
print_r($parts);

输出:

Array
(
    [scheme] => http
    [host] => sub.domain.example.com
    [path] => /foo/bar
    [query] => hat=bowler&accessory=cane
)

因此:

echo $parts['host'];

给你:

sub.domain.example.com