那样的事情怎么样?
function getDomain($url) {
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : '';
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
return $regs['domain'];
}
return false;
}
将使用经典提取域名parse_url
,然后查找没有任何子域的有效域(www 是子域)。不适用于“localhost”之类的东西。如果它不匹配任何东西,将返回 false。
// 编辑:
试试看:
echo getDomain('http://www.google.com/test.html') . '<br/>';
echo getDomain('https://news.google.co.uk/?id=12345') . '<br/>';
echo getDomain('http://my.subdomain.google.com/directory1/page.php?id=abc') . '<br/>';
echo getDomain('https://testing.multiple.subdomain.google.co.uk/') . '<br/>';
echo getDomain('http://nothingelsethan.com') . '<br/>';
它应该返回:
google.com
google.co.uk
google.com
google.co.uk
nothingelsethan.com
当然,如果它不通过它不会返回任何内容parse_url
,因此请确保它是一个格式正确的 URL。
// 附录:
阿尔尼塔克是对的。上面介绍的解决方案在大多数情况下都有效,但不一定适用于所有情况,并且需要进行维护以确保它们不是具有 .morethan6characters 等的新 TLD。提取域的唯一可靠方法是使用维护列表,例如http://publicsuffix.org/。一开始会更痛苦,但从长远来看会更容易、更健壮。您需要确保了解每种方法的优缺点以及它如何适合您的项目。