這樣的事情呢?
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