我在php中有一个类似third.second.tld
或fourth.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;
但是我认为这有点复杂。有更简单的方法吗?
答案 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