PHP实现通过URL提取根域名


Posted in PHP onMarch 31, 2016

PHP根据URL提取根域名,个人工作中用到,由于网络上很多代码都不能得到正确结果就自己写了一个,欢迎大家使用并提出其中的bug.

<?php 
#使用示例
echo getBaseDomain('http://blog.jp.goo.ne.jp/index.php')->domain;echo "\n";
echo getBaseDomain('http://51.ca/index.php')->domain;echo "\n";
echo getBaseDomain('http://blog.ab.cc.win.aisa.hk/index.php')->domain;echo "\n";
 
 
function getBaseDomain($url=''){
  if(!$url){
    return $url;
  }
  #列举域名中固定元素
  $state_domain = array(
    'al','dz','af','ar','ae','aw','om','az','eg','et','ie','ee','ad','ao','ai','ag','at','au','mo','bb','pg','bs','pk','py','ps','bh','pa','br','by','bm','bg','mp','bj','be','is','pr','ba','pl','bo','bz','bw','bt','bf','bi','bv','kp','gq','dk','de','tl','tp','tg','dm','do','ru','ec','er','fr','fo','pf','gf','tf','va','ph','fj','fi','cv','fk','gm','cg','cd','co','cr','gg','gd','gl','ge','cu','gp','gu','gy','kz','ht','kr','nl','an','hm','hn','ki','dj','kg','gn','gw','ca','gh','ga','kh','cz','zw','cm','qa','ky','km','ci','kw','cc','hr','ke','ck','lv','ls','la','lb','lt','lr','ly','li','re','lu','rw','ro','mg','im','mv','mt','mw','my','ml','mk','mh','mq','yt','mu','mr','us','um','as','vi','mn','ms','bd','pe','fm','mm','md','ma','mc','mz','mx','nr','np','ni','ne','ng','nu','no','nf','na','za','aq','gs','eu','pw','pn','pt','jp','se','ch','sv','ws','yu','sl','sn','cy','sc','sa','cx','st','sh','kn','lc','sm','pm','vc','lk','sk','si','sj','sz','sd','sr','sb','so','tj','tw','th','tz','to','tc','tt','tn','tv','tr','tm','tk','wf','vu','gt','ve','bn','ug','ua','uy','uz','es','eh','gr','hk','sg','nc','nz','hu','sy','jm','am','ac','ye','iq','ir','il','it','in','id','uk','vg','io','jo','vn','zm','je','td','gi','cl','cf','cn','yr','com','arpa','edu','gov','int','mil','net','org','biz','info','pro','name','museum','coop','aero','xxx','idv','me','mobi','asia','ax','bl','bq','cat','cw','gb','jobs','mf','rs','su','sx','tel','travel'
  );
   
  if(!preg_match("/^http/is", $url)){
    $url="http://".$url;
  }
 
  $res = null;
  $res->domain = null;
  $res->host = null;
  $url_parse = parse_url(strtolower($url));
  $urlarr = explode(".", $url_parse['host']);
  $count = count($urlarr);
   
  if($count <= 2){
    #当域名直接根形式不存在host部分直接输出
    $res->domain = $url_parse['host'];
  }elseif($count > 2){
    $last = array_pop($urlarr);
    $last_1 = array_pop($urlarr);
    $last_2 = array_pop($urlarr);
     
    $res->domain = $last_1.'.'.$last;
    $res->host = $last_2;
     
    if(in_array($last, $state_domain)){
      $res->domain=$last_1.'.'.$last;
      $res->host=implode('.', $urlarr);
    }
     
    if(in_array($last_1, $state_domain)){
      $res->domain = $last_2.'.'.$last_1.'.'.$last;
      $res->host = implode('.', $urlarr);
    }
    #print_r(get_defined_vars());die;
  }
  return $res;
   
}
PHP 相关文章推荐
php中static静态变量的使用方法详解
Jun 04 PHP
php下使用curl模拟用户登陆的代码
Sep 10 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
php生成excel文件的简单方法
Feb 08 PHP
smarty高级特性之对象的使用方法
Dec 25 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
基于laravel where的高级使用方法
Oct 10 PHP
PHP的PDO操作简单示例
Mar 30 #PHP
PHP Smarty模版简单使用方法
Mar 30 #PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 #PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 #PHP
PHP记录页面停留时间的方法
Mar 30 #PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 #PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 #PHP
You might like
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
树结构之JavaScript
2017/01/24 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
python中logging包的使用总结
2018/02/28 Python
numpy中矩阵合并的实例
2018/06/15 Python
在django view中给form传入参数的例子
2019/07/19 Python
python 调试冷知识(小结)
2019/11/11 Python
Django异步任务线程池实现原理
2019/12/17 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
python遍历路径破解表单的示例
2020/11/21 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
员工自我鉴定
2013/10/09 职场文书
幼儿教育感言
2014/02/05 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
村委会贫困证明范本
2014/09/17 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
2014年残联工作总结
2014/11/21 职场文书
2015员工年度考核评语
2015/03/25 职场文书
详解Python中的进程和线程
2021/06/23 Python
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫