关于查找域名

时间:2013-09-21 16:56:45

标签: php

我在互联网上搜索,我找到了这个代码来查找域名

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.

任何人都可以帮助我?

我如何找到min domain?

由于

1 个答案:

答案 0 :(得分: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;
}

说明:

  • 使用PHP_URL_HOST标记将给定的网址传递给parse_url()并获取完整的主机
  • 它以.作为分隔符
  • 爆炸
  • 数组的最后两个部分是切片 - 即。域名
  • 使用implode()
  • 加入

测试:

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

输出:

web.tv

Demo!

注意:这是我自己的答案here的修改版本,加上Alix的回答here

此功能目前不适用于.co.uk域名扩展程序 - 您可以轻松添加支票并相应更改array_slice功能。