4

我只需要从 url 中获取域名,(没有 com 和其他所有内容)示例:

我有:

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

我想使用 PHP:

domain1
domain2
domain3
domain4
4

4 回答 4

9

parse_url()

使用“PHP_URL_HOST”参数

然后在“。”上爆炸()并提取结果数组的倒数第二个元素

于 2012-11-21T14:53:52.770 回答
2

基于Shyam 的回答并采用Mark Ba​​ker建议的概念来获取命名空间的倒数第二个元素,我可能会建议使用更简单的正则表达式,该表达式利用如下所示的锚定前瞻

function get_domain($url) {
    $matches = [];
    preg_match('/[\w-]+(?=(?:\.\w{2,6}){1,2}(?:\/|$))/', $url, $matches);
    return $matches[0];
}

火柴

  • nameshttps://www.names.co.uk/
  • domain1http://www.subdomain.domain1.com/
  • domain2www.subdomain.domain2.net
  • domain3subdomain.subdomain2.domain3.org/
  • domain4http://domain4.com
  • seventymmhttp://www.seventymm.co.in/browse/buy-home-furnishing-bed-sheets-pack-of-3/2456/1/v2034/0/0/1/2/1/0/go
于 2018-09-26T17:53:11.313 回答
0

夏姆的回答是最好的。您只需确保所有 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
  • 域2
  • 域3
  • 域4
PS你可以将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>";
        }

输出:

域1
域2
域3 域
4

于 2016-10-29T06:36:55.060 回答
-5

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

用您不想包含的子域分解字符串。

例如。subdomain.domain.com

<?php
$add=explode('subdomain.',$_SERVER["SERVER_NAME"])[1];
// $add = domain.com
?>
于 2015-06-01T02:25:00.770 回答