How to get the domain name without www, subdomain, and com/net/org/etc [duplicate]

泪湿孤枕 提交于 2019-12-30 03:28:08

问题


I just need to get the domain name only form a url, (without com and everything else) example:

I have:

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

I want to get with PHP:

domain1
domain2
domain3
domain4

回答1:


parse_url()

with the "PHP_URL_HOST" argument

then explode() on the "." and extract the penultimate element of the resulting array




回答2:


Building off of Shyam's answer and employing the concept suggested by Mark Baker to get the penultimate element of the namespace, I might suggest using a simpler regular expression that utilizes an anchored lookahead like the following:

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

Matches

  • names in https://www.names.co.uk/
  • domain1 in http://www.subdomain.domain1.com/
  • domain2 in www.subdomain.domain2.net
  • domain3 in subdomain.subdomain2.domain3.org/
  • domain4 in http://domain4.com
  • seventymm in http://www.seventymm.co.in/browse/buy-home-furnishing-bed-sheets-pack-of-3/2456/1/v2034/0/0/1/2/1/0/go



回答3:


Shyam's answer is the best. You just have to make sure all the the URLs start with HTTP and add strtok at the end(see below). Here's another version using an array:

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

This will output:

  • domain1
  • domain2
  • domain3
  • domain4
P.S you can add strtok to the function as shown below:
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;
    }

then:

$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>";

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

Output:

domain1
domain2
domain3
domain4




回答4:


To get the domain , you can use $_SERVER["SERVER_NAME"].

Explode the string with the subdomain you do not want to include.

Eg. subdomain.domain.com

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


来源:https://stackoverflow.com/questions/13495828/how-to-get-the-domain-name-without-www-subdomain-and-com-net-org-etc

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!