Получение доменного имени без TLD - PullRequest
2 голосов
/ 14 октября 2011

У меня есть этот код прямо здесь:

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

Выход будет php.net

Мне нужно просто php без .net

Ответы [ 3 ]

3 голосов
/ 14 октября 2011

Хотя с регулярными выражениями здесь все в порядке, я бы порекомендовал parse_url

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

Это будет работать для доменов верхнего уровня, таких как .com, .org, .net и т. Д., Но недля .co.uk или .com.mx.Вам понадобится больше логики (скорее всего, массив tld), чтобы разобрать их.

2 голосов
/ 14 октября 2011

Сгруппируйте первую часть вашего второго регулярного выражения в /([^.]+)\.[^.]+$/, и $matches[1] будет php

0 голосов
/ 05 октября 2012

Это действительно просто:

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

Чтобы получить доменное имя, просто return $domain_name, оно работает только с доменом верхнего уровня. В случае поддоменов вы получите имя поддомена.

...