我正在尝试比较搜索查询返回的网址中的域名,因此需要从给定的网址解析域名。看到这是一个常见问题,我找到了一个包罗万象的解决方案here,为方便起见,下面提供了代码:
$url="http://www.seventymm.co.in/browse/buy-home-furnishing-bed-sheets-pack-of-3/2456/1/v2034/0/0/1/2/1/0/go";
echo get_domain($url);
function get_domain($url)
{
$urlobj=parse_url($url);
$domain=$urlobj['host'];
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;
}
对于大多数网址,这将从给定的网址中删除子网域和子网页,返回类似example.com或example.co.uk的内容。对于较短的域名,此功能似乎失败,我认为它会混淆为顶级域并且分析错误,例如http://mmqb.si.com/和https://www.si.com/返回mmqb.si.com和www.si. com分别。出于我的目的,我希望两个输入都返回si.com。有没有办法解析这些网址到si.com,同时仍然允许将网址解析为像example.co.uk这样的输出?理想情况下,我希望在不对要检查的任何参考值进行硬编码的情况下完成此操作,例如将co和uk放在已接受的顶级域列表中。
编辑ADDRESSING DUP
我意识到很多答案都显示了如何从网址中提取主机名,因为我已经链接了一个。我的问题具体是关于这些答案如何解析短域名(1或2个字母),经常将它们视为顶级域名并导致错误的解析。我正在寻找一个从网址准确解析短域的功能。