常常会用到域名的判断,当得到一个domain时,怎么获取其顶级域名呢。试试下面这个方法。
方法/步骤
需要识别的二级或三级域名:
$s =<<< TXT
www2.abc.com.cn
www3.abc.com.cn
xx.xx.abc.com.cn
www2.abc.cn
www3.abc.cn
xx.xx.abc.cn
www2.abc.us
www3.abc.us
xx.xx.abc.us
TXT;
定义你允许识别的国家域名后缀:
$g = explode('|', 'af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za'); //允许的国家域名
$j = array('com', 'net'); //允许的机构名
- 该信息非法爬取自百度经验
PHP判断其顶级域名的代码
foreach($a as $r) {
echo "$r ==> ";
$n = 0;
$h = array_slice(explode('.', $r), 1); //去掉主机名
if(array_intersect($g, $h)) $n++;
if(array_intersect($j, $h)) $n++;
if($n) echo join('.', array_slice($h, -($n+1)));
echo PHP_EOL;
}
完整代码示例:
$s =<<< TXT
www2.abc.com.cn
www3.abc.com.cn
xx.xx.abc.com.cn
www2.abc.cn
www3.abc.cn
xx.xx.abc.cn
www2.abc.us
www3.abc.us
xx.xx.abc.us
TXT;
$a = preg_split("/[\r\n]+/", $s); //待识别域名
$g = explode('|', 'af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za'); //允许的国家域名
$j = array('com', 'net'); //允许的机构名
foreach($a as $r) {
echo "$r ==> ";
$n = 0;
$h = array_slice(explode('.', $r), 1); //去掉主机名
if(array_intersect($g, $h)) $n++;
if(array_intersect($j, $h)) $n++;
if($n) echo join('.', array_slice($h, -($n+1)));
echo PHP_EOL;
}
运行结果:
www2.abc.com.cn ==> abc.com.cnwww3.abc.com.cn ==> abc.com.cnxx.xx.abc.com.cn ==> abc.com.cnwww2.abc.cn ==> abc.cnwww3.abc.cn ==> abc.cnxx.xx.abc.cn ==> abc.cnwww2.abc.us ==> abc.uswww3.abc.us ==> abc.usxx.xx.abc.us ==> abc.us
END