如何获取没有www,subdomain和com / net / org / etc的域名

时间:2012-11-21 14:49:57

标签: php url dns

我只需要将域名仅形成一个网址,(没有com和其他所有内容)示例:

我有:

http://www.subdomain.domain1.com/
www.subdomain.domain2.net
subdomain.subdomain2.domain3.org/
http://domain4.com

我想要使用PHP:

domain1
domain2
domain3
domain4

4 个答案:

答案 0 :(得分:9)

parse_url()

带有“PHP_URL_HOST”参数

然后explode()关于“。”并提取结果数组的倒数第二个元素

答案 1 :(得分:2)

Shyam's answer为基础,并采用Mark Baker提出的概念来获取名称空间的倒数第二个元素,我建议使用一个更简单的正则表达式,该表达式利用锚定的超前如下所示:

{{define "index"}}
        {{range .Items.result}}
            {{.Title}}
        {{end}}
{{end}}

匹配

  • ExecuteTemplate中的{li> function get_domain($url) { $matches = []; preg_match('/[\w-]+(?=(?:\.\w{2,6}){1,2}(?:\/|$))/', $url, $matches); return $matches[0]; }
  • names中的{li> https://www.names.co.uk/
  • domain1中的{li> http://www.subdomain.domain1.com/
  • domain2中的{li> www.subdomain.domain2.net
  • domain3中的{li> subdomain.subdomain2.domain3.org/
  • domain4中的{li> http://domain4.com

答案 2 :(得分:0)

Shyam的答案是最好的。您只需要确保所有URL都以HTTP开头并在最后添加strtok(参见下文)。这是使用数组的另一个版本:

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;
    }

$urls = array(
    'http://www.subdomain.domain1.com/',
    'http://www.subdomain.domain2.net',
    'http://subdomain.subdomain2.domain3.org/',
    'http://domain4.com'
);

// Using foreach + strtok to remove .[domain extensions]

echo "<ul>";

foreach($urls as $url)
    {
    echo "<li>" . strtok(get_domain($url),'.') . "</li>";
    }

echo "</ul>";

这将输出:

  • 域1
  • DOMAIN2
  • DOMAIN3
  • domain4
P.S您可以将strtok添加到函数中,如下所示:

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 strtok($regs['domain'], '.');
        }

    return false;
    }

然后:

$urls = array(
    'http://www.subdomain.domain1.com/',
    'http://www.subdomain.domain2.net',
    'http://subdomain.subdomain2.domain3.org/',
    'http://domain4.com'
);

// Using foreach

echo "<ul>";

foreach($urls as $url)
    {
    echo "<li>" . get_domain($url) . "</li>";
    }

echo "</ul>";

减去ul / li:

 $urls = array(
        'http://www.subdomain.domain1.com/',
        'http://www.subdomain.domain2.net',
        'http://subdomain.subdomain2.domain3.org/',
        'http://domain4.com'
    );

    // Using foreach
    foreach($urls as $url)
        {
        echo get_domain($url)."<br>";
        }

输出:

DOMAIN1
DOMAIN2
DOMAIN3
domain4

答案 3 :(得分:-5)

要获取域名,您可以使用$_SERVER["SERVER_NAME"]

使用您不想包含的子域爆炸字符串。

EG。 subdomain.domain.com

<?php
$add=explode('subdomain.',$_SERVER["SERVER_NAME"])[1];
// $add = domain.com
?>