为了账号安全,请及时绑定邮箱和手机立即绑定

如何从URL中获取域名

/ 猿问

如何从URL中获取域名

千万里不及你 2019-08-02 07:02:38

如何从URL中获取域名

如何从URL字符串中获取域名?

例子:

+----------------------+------------+

| input                | output     |

+----------------------+------------+

| www.google.com       | google     |

| www.mail.yahoo.com   | mail.yahoo |

| www.mail.yahoo.co.in | mail.yahoo |

| www.abc.au.uk        | abc        |

+----------------------+------------+

有关:


查看完整描述

3 回答

?
陪伴而非守候

我曾经为我工作的一家公司写过这样的辞呈。解决办法是:

  • 找出每一个人的名单

    ccTLD

    gTLD

    可用。你的第一站应该是

    IANA

    ..Mozilla的列表乍一看上去很棒,但是缺少ac.uk,因此它并不是真正可用的。
  • 加入列表,如下面的示例所示。

    警告:

    点菜很重要!如果

    org.uk

    会出现在

    英国

    然后

    example.org.uk

    相配

    组织

    而不是

    例.

示例regex:

.*([^\.]+)(com|net|org|info|coop|int|co\.uk|org\.uk|ac\.uk|uk|__and so on__)$

这非常有效,而且还匹配了奇怪的、非官方的顶级级别,比如de.com还有朋友。

好处是:

  • 如果正则表达式是最优排序的,则速度非常快。

当然,这种解决方案的缺点是:

  • 手写regex,它必须手动更新,如果ccTLDs改变或得到添加。乏味的工作!
  • 非常大的正则表达式,所以不太容易读。




查看完整回答
反对 回复 2019-08-03
?
撒科打诨
/^(?:www\.)?(.*?)\.(?:com|au\.uk|co\.in)$/


查看完整回答
反对 回复 2019-08-03
?
弑天下

准确提取域名可能非常棘手,主要是因为域扩展可以包含两个部分(如.com.au或.co.uk),而子域(前缀)可能存在,也可能不存在。列出所有的域扩展不是一个选项,因为其中有数百个。例如,EuroDNS.com列出了800多个域名扩展。

因此,我编写了一个简短的php函数,它使用‘parseurl()’和一些有关域扩展的观察来准确提取url组件和域名。职能如下:

function parse_url_all($url){
    $url = substr($url,0,4)=='http'? $url: 'http://'.$url;
    $d = parse_url($url);
    $tmp = explode('.',$d['host']);
    $n = count($tmp);
    if ($n>=2){
        if ($n==4 || ($n==3 && strlen($tmp[($n-2)])<=3)){
            $d['domain'] = $tmp[($n-3)].".".$tmp[($n-2)].".".$tmp[($n-1)];
            $d['domainX'] = $tmp[($n-3)];
        } else {
            $d['domain'] = $tmp[($n-2)].".".$tmp[($n-1)];
            $d['domainX'] = $tmp[($n-2)];
        }
    }
    return $d;}

这个简单的函数几乎在每一种情况下都能工作。有几个例外,但这些是非常罕见的。

要演示/测试此函数,可以使用以下方法:

$urls = array('www.test.com', 'test.com', 'cp.test.com' .....);echo "<div style='overflow-x:auto;'>";echo "<table>";echo "<tr><th>URL</th><th>Host</th><th>Domain</th><th>Domain X</th></tr>";foreach ($urls as $url) {
    $info = parse_url_all($url);
    echo "<tr><td>".$url."</td><td>".$info['host'].
    "</td><td>".$info['domain']."</td><td>".$info['domainX']."</td></tr>";}echo "</table></div>";

对于URL列出的输出如下:

如您所见,无论呈现给函数的URL是什么,都会一致提取没有扩展名的域名和域名。

我希望这能帮上忙。


查看完整回答
反对 回复 2019-08-03

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信