每天学习一点点,成功增加一大步

PHP 获取顶级域名的方法

PHP zhanghui 436℃

最近在一个项目的数据中发现“多重域名”的情况,何为“多重域名”就是二级域名与顶级域名都存在于数据表中,而项目中只要一个域名就可以了,不然将导致与其相关的数据不统一,怎么办?只能去重的了,去除二级域名(包括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 获取顶级域名的方法

喜欢 (5)