2013-10-17 109 views
1

我需要知道如何從沒有tld的網址獲取域名。從網址獲取域名無tld

這是我對於.COM工作,.INFO等而不是.co.uk

// get host name from URL 
preg_match('@^(?:http://)?([^/]+)@i', 
"http://example.co.uk", $matches); 
$host = $matches[1]; 

// get last two segments of host name 
preg_match('/([^.]+)\.[^.]+$/', $host, $matches); 
echo "domain name is: {$matches[1]}\n"; 

當我把它叫「example.co.uk 「域它只是顯示:」CO「,當我需要它來顯示」例如「

感謝

+0

您需要的公共後綴的列表。 – SLaks

+0

具體而言,您需要[Public Suffix List](http://publicsuffix.org/)。 – duskwuff

+0

Duplicate http://stackoverflow.com/questions/3853338/remove-domain-extension/3853473#3853473 –

回答

0

Regex是那裏的詭計,你需要使用Public Suffix List的軟件包,只有這樣它才能在複雜的TLDS上得到正確的結果。

我建議TLDExtract域解析,這裏是顯示DIFF示例代碼:

$extract = new LayerShifter\TLDExtract\Extract(); 

# For 'http://www.domain.com/site' 

$result = $extract->parse('http://www.domain.com/site'); 
$result->getFullHost(); // will return 'www.domain.com' 
$result->getRegistrableDomain(); // will return 'domain.com' 
$result->getSuffix(); // will return 'com' 

# For 'http://www.domain.co.uk/site' 

$result = $extract->parse('http://www.domain.co.uk/site'); 
$result->getFullHost(); // will return 'www.domain.co.uk' 
$result->getRegistrableDomain(); // will return 'domain.co.uk' 
$result->getSuffix(); // will return 'co.uk'