This post was updated 565 days ago and some of the ideas may be out of date.

封装的一个获取PHP顶级域名函数 PHP>=8.0

function getTopLevelDomain(string $url): string
{
    if (str_contains($url, '://')) {
        $url = parse_url($url, PHP_URL_HOST);
    }

    $url = strtolower($url);

    // 校验二级后缀
    $isTowTopLevelSuffix = (bool)preg_match(
        '/\.(ac\.cn|com\.cn|edu\.cn|gov\.cn|mil\.cn|net\.cn|org\.cn|bj\.cn|sh\.cn|tj\.cn|cq\.cn|he\.cn|sx\.cn|nm\.cn|ln\.cn|jl\.cn|hl\.cn|js\.cn|zj\.cn|ah\.cn|fj\.cn|jx\.cn|sd\.cn|ha\.cn|hb\.cn|hn\.cn|gd\.cn|gx\.cn|hi\.cn|sc\.c
n|gz\.cn|yn\.cn|xz\.cn|sn\.cn|gs\.cn|qh\.cn|nx\.cn|xj\.cn|tw\.cn|hk\.cn|mo\.cn|com\.af|net\.af|org\.af|com\.ag|net\.ag|org\.ag|co\.at|or\.at|com\.bi|edu\.bi|info\.bi|mo\.bi|or\.bi|org\.bi|com\.br|net\.br|org\.br|co\.bz|com\.bz|net\.
bz|org\.bz|co\.cm|com\.cm|net\.cm|com\.co|net\.co|nom\.co|ar\.com|br\.com|cn\.com|de\.com|eu\.com|gb\.com|gr\.com|hu\.com|jpn\.com|kr\.com|no\.com|ru\.com|se\.com|uk\.com|us\.com|za\.com|com\.de|co\.dm|com\.ec|fin\.ec|info\.ec|med\.
ec|net\.ec|pro\.ec|com\.es|nom\.es|org\.es|co\.gg|net\.gg|org\.gg|co\.gl|com\.gl|edu\.gl|net\.gl|org\.gl|com\.gr|co\.gy|com\.gy|net\.gy|com\.hk|edu\.hk|gov\.hk|idv\.hk|net\.hk|org\.hk|com\.hn|net\.hn|org\.hn|adult\.ht|com\.ht|info\.
ht|net\.ht|org\.ht|org\.il|co\.in|firm\.in|gen\.in|ind\.in|net\.in|org\.in|bz\.it|co\.it|co\.je|net\.je|org\.je|com\.ki|net\.ki|org\.ki|co\.kr|ne\.kr|or\.kr|pe\.kr|re\.kr|seoul\.kr|com\.lc|net\.lc|org\.lc|co\.mg|com\.mg|net\.mg|org\
.mg|ac\.mu|co\.mu|com\.mu|net\.mu|org\.mu|com\.mx|gb\.net|hu\.net|jp\.net|se\.net|uk\.net|com\.nf|net\.nf|org\.nf|co\.nl|net\.nz|org\.nz|ae\.org|us\.org|com\.pe|net\.pe|org\.pe|com\.ph|com\.pk|net\.pk|org\.pk|biz\.pl|com\.pl|info\.p
l|net\.pl|org\.pl|waw\.pl|aaa\.pro|aca\.pro|acct\.pro|avocat\.pro|bar\.pro|cpa\.pro|eng\.pro|jur\.pro|law\.pro|med\.pro|recht\.pro|com\.ps|net\.ps|org\.ps|com\.pt|edu\.pt|org\.pt|com\.ru|net\.sb|org\.sb|com\.sc|net\.sc|org\.sc|com\.
sg|com\.so|net\.so|org\.so|club\.tw|com\.tw|ebiz\.tw|game\.tw|idv\.tw|org\.tw|me\.uk|org\.uk|co\.uz|com\.uz|com\.vc|net\.vc|org\.vc|ac\.vn|biz\.vn|com\.vn|edu\.vn|gov\.vn|health\.vn|info\.vn|int\.vn|name\.vn|net\.vn|org\.vn|pro\.vn)$/',
        $url,
    );

    if ($isTowTopLevelSuffix) {
        return preg_replace('/^.*?\.([A-z0-9-]+\.[A-z]+\.[A-z]{2,7})$/', '$1', $url);
    } else {
        return preg_replace('/^.*?\.([A-z0-9-]+\.[A-z]{2,7})$/', '$1', $url);
    }
}