从url获取其子域名的域名

hak*_*iko 6 php regex subdomain

我正在使用此函数从字符串中获取域和子域.但是如果string已经是我期望的格式,则返回null

function getDomainFromUrl($url) {
    $host = parse_url($url, PHP_URL_HOST);
    return preg_replace('/^www\./', '', $host);
}

$url = "http://abc.example.com/" -> abc.example.com | OK

$url = "http://www.example.com/" -> example.com | OK

$url = "abc.example.com" -> FAILS!
Run Code Online (Sandbox Code Playgroud)

chr*_*s85 1

问题是 parse_url 返回 false。在尝试使用之前检查以确保获得响应,否则$host为空。

<?php
function getDomainFromUrl($url) {
    $host = (parse_url($url, PHP_URL_HOST) != '') ? parse_url($url, PHP_URL_HOST) : $url;
    return preg_replace('/^www\./', '', $host);
}
echo getDomainFromUrl("http://abc.example.com/") . "\n";
echo getDomainFromUrl("http://www.example.com/") . "\n";
echo getDomainFromUrl("abc.example.com");
Run Code Online (Sandbox Code Playgroud)

输出:

abc.example.com
example.com
abc.example.com