Получить доменное имя из URL без tld

Мне нужно знать, как получить доменное имя из URL-адреса без tld.

Это то, что у меня работает для .com, .info и т. д., но не для .co.uk.

// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://example.co.uk", $matches);
$host = $matches[1];

// get last two segments of host name
preg_match('/([^.]+)\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[1]}\n";

Когда я получаю вызов домена "example.co.uk", он просто показывает: "co", когда мне нужно показать "example"

Спасибо


person LionHeart    schedule 17.10.2013    source источник
comment
Вам нужен список общедоступных суффиксов.   -  person SLaks    schedule 17.10.2013
comment
В частности, вам нужен Список общедоступных суффиксов.   -  person    schedule 17.10.2013
comment
Дубликат stackoverflow.com/questions/3853338/remove-domain-extension /   -  person Ruben Serrate    schedule 17.10.2013
comment
Куда мне добавить список общедоступных суффиксов?   -  person LionHeart    schedule 17.10.2013


Ответы (1)


Regex — ложное решение, вам нужен пакет, который использует Public Suffix List, только с ним вы можете получить правильный результат на сложных TLDS .

Я рекомендую TLDExtract для разбора домена, вот пример кода, который показывает различия:

$extract = new LayerShifter\TLDExtract\Extract();

# For 'http://www.domain.com/site'

$result = $extract->parse('http://www.domain.com/site');
$result->getFullHost(); // will return 'www.domain.com'
$result->getRegistrableDomain(); // will return 'domain.com'
$result->getSuffix(); // will return 'com'

# For 'http://www.domain.co.uk/site'

$result = $extract->parse('http://www.domain.co.uk/site');
$result->getFullHost(); // will return 'www.domain.co.uk'
$result->getRegistrableDomain(); // will return 'domain.co.uk'
$result->getSuffix(); // will return 'co.uk'
person Oleksandr Fediashov    schedule 02.10.2016