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程序--记数器
Oct 09 PHP
php报表之jpgraph柱状图实例代码
Aug 22 PHP
深入PHP magic quotes的详解
Jun 17 PHP
php汉字转拼音的示例
Feb 27 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
Jun 10 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
php生成图片验证码的方法
Apr 15 PHP
iOS10推送通知开发教程
Sep 19 PHP
php语法检查的方法总结
Jan 21 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网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
Python函数中不定长参数的写法
2019/02/13 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
入党积极分子介绍信
2014/01/17 职场文书
老兵退伍标语
2014/10/07 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
领导干部学习心得体会
2016/01/23 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android