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&amp;&amp;mysql)四
Oct 09 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
php短域名转换为实际域名函数
Jan 17 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
php把session写入数据库示例
Feb 26 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
php ajax实现文件上传进度条
Mar 29 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
通过PHP实现获取访问用户IP
May 09 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
SMARTY学习手记
2007/01/04 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
Python实现将xml导入至excel
2015/11/20 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
python add_argument()用法解析
2020/01/29 Python
python实现批量转换图片为黑白
2020/06/16 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
中间件分为哪几类
2012/03/14 面试题
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
入党自我鉴定范文
2013/10/04 职场文书
采购主管工作职责
2013/12/12 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
论群众路线学习笔记
2014/11/06 职场文书
营业用房租赁协议书
2014/11/26 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
Python中requests库的用法详解
2022/06/05 Python