从域字符串获取主域

时间:2019-01-23 14:31:58

标签: php string

我在php中有一个类似third.second.tldfourth.third.second.tld的字符串。提取主域名(second.tld)的最简单最好的方法是什么?

我尝试过

 $domain = 'fourth.third.second.tld';
 $topLevel = array_reverse(explode('.', $domain))[0];
 $secondLevel = array_reverse(explode('.', $domain))[1];
 $mainDomain = $secondLevel . '.' . $topLevel;

但是我认为这有点复杂。有更简单的方法吗?

3 个答案:

答案 0 :(得分:2)

它比您想象的还要复杂-请使用专门为此类操作构建的库。否则,您可能会发现不同TLD的各种陷阱。例如,在.com域中,第二级通常是“主域”,但是英国的用户习惯于在第三级发现“主域”的.co.uk域。

https://github.com/layershifter/TLDExtract是为PHP构建的那些库之一,并且README从一个示例开始,以相互提取和拆分TLD,“主域”和子域。 TLDExtract还支持IDNA编码的域(国际化域名)。

答案 1 :(得分:1)

$domain = 'fourth.third.second.tld';

$parts = explode(".", $domain);

$lastParts = array_slice($parts, -2);

$mainDomain = join(".", $lastParts);

//output: second.tld

答案 2 :(得分:1)

或者您可以使用正则表达式

$a = 'fourth.third.second.tld';
$b = 'third.second.tld';
$c = 'second.tld';

function getDomainName($str) {
    $r = preg_replace('/(\w*)(\.)(\w*)$/', '', $str);
    return str_replace($r, '', $str);
}

echo getDomainName($a);

echo "\n";

echo getDomainName($b);

echo "\n";

echo getDomainName($c);

结果将是

second.tld
second.tld
second.tld

php sandbox