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下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
php cli 小技巧
Jun 03 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
PHP中nowdoc和heredoc使用需要注意的一点
Mar 21 PHP
PHP防盗链代码实例
Aug 27 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
Zend Framework教程之Zend_Config_Xml用法分析
Mar 23 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
php文件包含的几种方式总结
Sep 19 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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python的re正则表达式实例代码
2018/01/24 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
公司捐书倡议书
2015/04/27 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS