How to get the domain name without www, subdomain,

2019-02-10 05:31发布

问题:

This question already has an answer here:

  • PHP Getting Domain Name From Subdomain 22 answers

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
?>


标签: php url dns