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 相关文章推荐
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
9个比较实用的php代码片段
Mar 15 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
php装饰者模式简单应用案例分析
Oct 23 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
jquery 学习之一 对象访问
2010/11/23 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python list格式数据excel导出方法
2018/10/31 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python的pip有什么用
2020/06/17 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
什么是lambda函数
2013/09/17 面试题
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
运动员口号
2014/06/09 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
如何理解及使用Python闭包
2021/06/01 Python