这样的事情呢?
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
,所以请确保它是一个格式正确的网址。
//附录:
参宿是正确的。上述解决方案将在大多数案件中发挥作用,但不一定全部需要维护,以确保它们不是新的顶级域名,例如6个以上的字符等等。提取域的唯一可靠方法是使用维护的列表,如http://publicsuffix.org/。起初更痛苦,但长期更容易和更强大。你需要确保你了解每种方法的优缺点,以及它如何适合你的项目。
你已经做出了判断前面那个我不知道将举行不够好,那是你可以告诉部分的主机是感兴趣的领域,它是真的是顶级域名? – 2008-12-30 01:29:35
例如,如果只查看标准域名,几乎任何dyndns域名似乎都会被阻止。要阻止来自www.mysite.isa-geek.org域名的垃圾邮件,或者只是mysite.isa-geek.org,您是否会关心是否阻止了所有的isa-geek.org? – 2008-12-30 01:30:55
是的,在这种情况下,我会很好地阻止isa-geek.org。我最关心的是foo。[suffix]其中[suffix]是标准后缀的tld或组合。 tld(co.uk) – 2008-12-30 01:43:49