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 htmlspecialchars加强版
Feb 16 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
一组PHP加密解密函数分享
Jun 05 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
PHP中header用法小结
May 23 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 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/04/18 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
Django Admin 实现外键过滤的方法
2017/09/29 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
护士自荐信范文
2013/12/15 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
银行内勤岗位职责
2014/04/09 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android