最近在一个项目的数据中发现“多重域名”的情况,何为“多重域名”就是二级域名与顶级域名都存在于数据表中,而项目中只要一个域名就可以了,不然将导致与其相关的数据不统一,怎么办?只能去重的了,去除二级域名(包括www),只保留顶级域名,那么有顶级域名有两种格式:
- xxx(自定义部分).com(国际域名部分).cn(地域型域名部分)
- xxx(自定义部分).com(国际域名部分)
那么多出的地域型域名不但只有中国大陆有,其他国家(或地区)都有,而网络上大部分的例子只适合中国大陆的,而且国际域名部分也陈旧(停留在10年前的那几个),所以没有达到通用的目的。
这个是有些陈旧,局限的例子:
https://www.jb51.net/article/162555.htm
后来还是找到了比较好的例子:
public static function getTopHost(string $url): string
{
$host = strtolower($url);
if (strpos($host, '/') !== false) {
$parse = @parse_url($host);
$host = $parse ['host'];
}
$topLevelDomainDB = array('com', 'edu', 'gov', 'int', 'mil', 'net', 'org', 'biz', 'info', 'pro', 'name', 'museum', 'coop', 'aero', 'xxx', 'idv', 'mobi', 'cc', 'me');
$str = '';
foreach ($topLevelDomainDB as $v) {
$str .= ($str ? '|' : '') . $v;
}
$matchStr = "[^\.]+\.(?:(" . $str . ")|\w{2}|((" . $str . ")\.\w{2}))$";
if (preg_match("/" . $matchStr . "/ies", $host, $match_arr)) {
$domain = $match_arr['0'];
} else {
$domain = $host;
}
return $domain;
}
转载请注明:隨習筆記 » PHP 获取顶级域名的方法