如何仅返回域名的 TLD
?
例如,如果有以下域名:
www.domain.co.uk
我想仅返回 .co.uk
对于 domain.co.uk
也是同样的处理方式
对于所有其他的 TLDs
(.com, .co, .org 等)
是否有简单的方法在PHP中实现,而不使用 Regex
?
我考虑使用 explode
但我对此不太熟悉。
如何仅返回域名的 TLD
?
例如,如果有以下域名:
www.domain.co.uk
我想仅返回 .co.uk
对于 domain.co.uk
也是同样的处理方式
对于所有其他的 TLDs
(.com, .co, .org 等)
是否有简单的方法在PHP中实现,而不使用 Regex
?
我考虑使用 explode
但我对此不太熟悉。
您可以使用一个名为 tldextract.php
的库。
在这里找到它 https://github.com/data-ac-uk/equipment/blob/master/_misc/tldextract.php
使用非常简单:
$extract = new TLDExtract();
$components = $extract('http://forums.bbc.co.uk/');
echo $components['tld']; // co.uk
现在这有多简单呢?
如果您阅读代码,可以看到它在fetchTldList()
函数中使用了大量的顶级域名列表。
$returnHostName = parse_url($url, PHP_URL_HOST) //it will retrun 'domain' in your case
$returnArrayType = explode($returnHostName, $returnHostName); //explode it from string 'domain'
现在变量returnArrayType包含您想要的输出,但以数组形式呈现,您可以通过调用其索引来获取它。
检查它是否起作用。
这个函数适用于www和非www域名,不适用于子域名。为了获得更好的结果,您需要使用正则表达式或库。
$domain = "www.domain.co.uk";
function tld($domain)
{
if (strstr('www', $domain)) {
$part = 3;
} else {
$part = 2;
}
$expld = explode('.', $domain);
if (count($expld) > $part) {
return $expld[count($expld) - 2] . '.' . $expld[count($expld) - 1];
} else {
return $expld[count($expld) - 1];
}
}