PHP实现获取url地址中顶级域名的方法示例
短信预约 -IT技能 免费直播动态提醒
做域名黑名单的时候我们需要得到顶级域名。下面总结几种PHP实现获取url地址中顶级域名的方法示例
`
方法一:
header('content-type:text/html;charset=utf-8');//获取顶级域名function getTopHost($url){ $url = strtolower($url); //首先转成小写 $hosts = parse_url($url); $host = $hosts['host']; //查看是几级域名 $data = explode('.', $host); $n = count($data); //判断是否是双后缀 $preg = '/[\w].+\.(com|net|org|gov|edu)\.cn$/'; if (($n > 2) && preg_match($preg, $host)) { //双后缀取后3位 $host = $data[$n - 3] . '.' . $data[$n - 2] . '.' . $data[$n - 1]; } else { //非双后缀取后两位 $host = $data[$n - 2] . '.' . $data[$n - 1]; } return $host;}// 测试echo getTopHost("http://ABC.com/s/j?wd=djl"), '
';echo getTopHost("http://www.abc.com/s/j?wd=djl"), '
';echo getTopHost("http://2.www.abc.com/s/j?wd=djl"), '
';echo getTopHost("https://mp.weixin.qq.com/s?__biz=MzA893ODI3ODU8lzMw=="), '
';echo getTopHost("http://codeit.org.cn/"), '
';echo getTopHost("https://www.sina.com.cn/?from=kandian"), '
';
运行结果
abc.comabc.comabc.comqq.comcodeit.org.cnsina.com.cn
方法二,
function GetTopDomain(string $url = null){ // 判断网址是否带http://或https:// if (preg_match('/^http(s)?:\/\/.+/', $url)) { $hosts = parse_url(strtolower($url)); $host = $hosts['host']; } else { $host = strtolower($url); } // 查看是几级域名 $data = explode('.', $host); $n = count($data); // 判断是否是双后缀 $preg = '/[w].+.(com|net|org|gov|edu).cn$/'; // 双后缀取后3位 if (($n > 2) && preg_match($preg, $host)) $host = $data[$n - 3] . '.' . $data[$n - 2] . '.' . $data[$n - 1]; // 非双后缀取后两位 else $host = $data[$n - 2] . '.' . $data[$n - 1]; return $host;}
方法三
//获取顶级域名function get_host(){ $url = $_SERVER[‘HTTP_HOST’]; $data = explode(‘.’, $url); $co_ta = count($data); //判断是否是双后缀 $zi_tow = true; $host_cn = ‘com.cn,net.cn,org.cn,gov.cn’; $host_cn = explode(‘,’, $host_cn); foreach($host_cn as $host){ if(strpos($url,$host)){ $zi_tow = false; } } //如果是返回FALSE ,如果不是返回true if($zi_tow == true){ $host = $data[$co_ta-2].‘.’.$data[$co_ta-1]; }else{ $host = $data[$co_ta-3].‘.’.$data[$co_ta-2].‘.’.$data[$co_ta-1]; } return $host;}
方法四:根据二级域名甚至三级获取其顶级域名
需要识别的二级或三级域名:
$s =<<< TXTwww2.abc.com.cnwww3.abc.com.cnxx.xx.abc.com.cnwww2.abc.cnwww3.abc.cnxx.xx.abc.cnwww2.abc.uswww3.abc.usxx.xx.abc.usTXT;
2定义你允许识别的国家域名后缀:
$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'); //允许的机构名
3PHP判断其顶级域名的代码
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;}
4
完整代码示例:
$s =<<< TXTwww2.abc.com.cnwww3.abc.com.cnxx.xx.abc.com.cnwww2.abc.cnwww3.abc.cnxx.xx.abc.cnwww2.abc.uswww3.abc.usxx.xx.abc.usTXT;$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
来源地址:https://blog.csdn.net/qikexun/article/details/129899133
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341