-3

我在互联网上搜索,发现此代码用于查找域名

function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['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;
}

它适用于http://www.google.comhttp://www.google.co.uk

但它不适用于 test.web.tv。

任何人都可以帮助我吗?

我怎样才能找到最小域?

谢谢

4

1 回答 1

1

该函数parse_url()需要一个有效的 URL。在这种情况下test.web.tv是无效的,所以parse_url()不会给你预期的结果。为了解决这个问题,您可以首先检查 URL 是否具有http://前缀,如果没有,请手动添加前缀。这样,您就可以绕过parse_url().

但是,我认为最好使用以下功能。

function getDomain($url) 
{    
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }

    $domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2));
    return $domain;
}

解释:

  • parse_url()使用PHP_URL_HOST标志传递给定的 URL并获得完整的主机
  • .它作为分隔符爆炸
  • 数组的最后两部分被切片——即。域名
  • 它使用implode()

测试:

echo getDomain('test.web.tv');

输出:

web.tv

演示!

注意:这是我自己的答案的修改版本,这里结合了 Alix 的答案

此功能目前不适用于.co.uk域扩展 - 您可以轻松添加检查并相应地更改array_slice功能。

于 2013-09-21T17:12:01.607 回答