我需要知道如何在没有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”
由于
答案 0 :(得分:0)
正则表达式是那里的虚假解决方案,您需要使用Public Suffix List的包,只有使用它才能在复杂的TLDS上获得正确的结果。
我建议TLDExtract进行域解析,这里是显示diff的示例代码:
$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'