开发者

Getting domain name without TLD

开发者 https://www.devze.com 2023-04-13 01:55 出处:网络
I have this code right here: // get host name from URL preg_match(\'@^(?:http://)?([^/]+)@i\', \"http://www.joomla.subdomain.php.net/index.html\", $matches);

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


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 .


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


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


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号