PHP 从子域获取域名

2022-08-30 14:07:10

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

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

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

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


答案 1

堆栈溢出问题存档:


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;
}

答案 2

如果您想要一个快速简单的解决方案,无需外部调用并根据预定义的数组进行检查。也适用于“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;
}
  • domain.com-> domain.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

推荐