从完整 URL 获取域名
假设有人输入了如下网址:
http://i.imgur.com/a/b/c?query=value&query2=value
我想回来:imgur.com
不i.imgur.com
这是我现在拥有的代码
$sourceUrl = parse_url($url);
$sourceUrl = $sourceUrl['host'];
但这又回来了i.imgur.com
假设有人输入了如下网址:
http://i.imgur.com/a/b/c?query=value&query2=value
我想回来:imgur.com
不i.imgur.com
这是我现在拥有的代码
$sourceUrl = parse_url($url);
$sourceUrl = $sourceUrl['host'];
但这又回来了i.imgur.com
检查下面的代码,它应该可以正常工作。
<?php
function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : $pieces['path'];
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;
}
print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk'
?>
您需要使用公共后缀列表的包。是的,您可以使用字符串函数parse_url()或正则表达式,但它们会在复杂的URL中产生不正确的结果。
我建议使用TLDExtract进行域解析,这是示例代码:
$url = 'http://i.imgur.com/a/b/c?query=value&query2=value';
parse_url($url, PHP_URL_HOST); // will return 'i.imgur.com'
$extract = new LayerShifter\TLDExtract\Extract();
$result = $extract->parse($url);
$result->getFullHost(); // will return 'i.imgur.com'
$result->getSubdomain(); // will return 'i'
$result->getRegistrableDomain(); // will return 'imgur.com'
$result->getSuffix(); // will return 'com'