sg552
sg552

Reputation: 1543

Getting domain name without TLD

I have this code right here:

    // get host name from URL
    preg_match('@^(?:http://)?([^/]+)@i',
    "http://www.joomla.subdomain.php.net/index.html", $matches);
    $host = $matches[1];

    // get last two segments of host name
    preg_match('/[^.]+\.[^.]+$/', $host, $matches);
    echo "domain name is: {$matches[0]}\n";

The output will be php.net

I need just php without .net

Upvotes: 4

Views: 5751

Answers (4)

Bailey Parker
Bailey Parker

Reputation: 15905

Although regexes are fine here, I'd recommend parse_url

$host = parse_url('http://www.joomla.subdomain.php.net/index.html', PHP_URL_HOST);
$domains = explode('.', $host);
echo $domains[count($domains)-2];

This will work for TLD's like .com, .org, .net, etc. but not for .co.uk or .com.mx. You'd need some more logic (most likely an array of tld's) to parse those out .

Upvotes: 7

Pedro Lobito
Pedro Lobito

Reputation: 98921

Late answer and it doesn't work with subdomains, but it does work with any tld (co.uk, com.de, etc):

$domain = "somesite.co.uk";
$domain_solo = explode(".", $domain)[0];
print($domain_solo);

Demo

Upvotes: 1

Christine
Christine

Reputation: 522

Group the first part of your 2nd regex into /([^.]+)\.[^.]+$/ and $matches[1] will be php

Upvotes: 4

Maciej
Maciej

Reputation: 1

It's really easy:

function get_tld($domain) {
    $domain=str_replace("http://","",$domain); //remove http://
    $domain=str_replace("www","",$domain); //remowe www
    $nd=explode(".",$domain);
    $domain_name=$nd[0];
    $tld=str_replace($domain_name.".","",$domain);
    return $tld;
}

To get the domain name, simply return $domain_name, it works only with top level domain. In the case of subdomains you will get the subdomain name.

Upvotes: -2

Related Questions