PHP 从子域获取域名

新手上路,请多包涵

我需要编写一个函数来解析包含域名的变量。我最好用一个例子来解释这一点,变量可以包含以下任何内容:

 here.example.com
example.com
example.org
here.example.org

但是当通过我的函数时,所有这些都必须返回 example.com 或 example.co.uk,基本上是根域名。我确定我以前做过这个,但我已经在谷歌上搜索了大约 20 分钟,但找不到任何东西。任何帮助,将不胜感激。

编辑:忽略 .co.uk,假定所有通过此功能的域都有一个 3 个字母的 TLD。

原文由 zuk1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 293
2 个回答

Stackoverflow 问题存档:


 print get_domain("http://somedomain.co.uk"); // outputs 'somedomain.co.uk'

function get_domain($url)
{
  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
    return $regs['domain'];
  }
  return false;
}

原文由 Sampson 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您想要一个快速简单的解决方案,无需外部调用和检查预定义数组。与最受欢迎的答案不同,也适用于“www.domain.gallery”等新域。

 function get_domain($host){
  $myhost = strtolower(trim($host));
  $count = substr_count($myhost, '.');
  if($count === 2){
    if(strlen(explode('.', $myhost)[1]) > 3) $myhost = explode('.', $myhost, 2)[1];
  } else if($count > 2){
    $myhost = get_domain(explode('.', $myhost, 2)[1]);
  }
  return $myhost;
}
  • 域名.com -> 域名.com
  • sub.domain.com -> domain.com
  • www.domain.com -> domain.com
  • www.sub.sub.domain.com -> domain.com
  • domain.co.uk -> domain.co.uk
  • sub.domain.co.uk -> domain.co.uk
  • www.domain.co.uk -> domain.co.uk
  • www.sub.sub.domain.co.uk -> domain.co.uk
  • domain.photography -> domain.photography
  • www.domain.photography -> domain.photography
  • www.sub.domain.photography -> domain.photography

原文由 suncat100 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏