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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
PHP 文件系统详解
Sep 13 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
php中的异常和错误浅析
May 03 PHP
PHP封装的mysqli数据库操作类示例
Feb 16 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 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批量生成缩略图的代码
2008/07/19 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
JS中Location使用详解
2015/05/12 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
virtualenv介绍及简明教程
2020/06/23 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
python Matplotlib模块的使用
2020/09/16 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
高职教师岗位职责
2013/12/24 职场文书
生日寿宴答谢词
2014/01/19 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
大学生演讲稿
2014/04/25 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技