Как удалить доменное имя из URL в PHP? - PullRequest
0 голосов
/ 03 февраля 2010
parse_url($url, PHP_URL_HOST)

Вышеуказанное будет работать для:

sub1.domain.name,

sub2.domain.name, ...

Я хочу удалить только доменное имя.

Ответы [ 4 ]

1 голос
/ 03 февраля 2010

Так что вы начинаете не с URL.

Самое простое решение - сделать его похожим на URL:

function get_host_from_bad_url($url)
{
 if (!$candidate_host=parse_url($url, PHP_URL_HOST)) { // deliberate assignment
     $candidate_host=parse_url('http://' . $url, PHP_URL_HOST);
 }
 return $condidate_host;
}

Существует множество других вещей, которые могут содержать имя хоста, но без большого количества информации сложно предложить, как их проанализировать.

Однако альтернативный подход состоит в том, чтобы попытаться извлечь что-либо, похожее на имя хоста (а затем, возможно, выполнить проверку DNS):

function strip_hosts_from_string($inp)
{
 $inp=strtolower($inp);
 $matches=preg_match_all('/([a-z0-9\-]+\.){2,}([a-z]{2,6})/',$inp);
 $hostnames=$matches[0];
 foreach ($hostnames as $x=>$host) {
       if (gethostbyname($host)==$host) {
           unset($hostnames[$x]);
       }
 }
 return $hostnames;
}

С

0 голосов
/ 03 февраля 2010

Вы можете просто взять что-нибудь после первой точки, если есть более одной точки.

$url=parse_url($url, PHP_URL_HOST);
$domain=substr($url,strpos($url,'.')+1);

Это немного глупо, конечно, но это работает на ваших примерах. Возможно, вы захотите проверить, было ли сначала хотя бы два. Если вы имеете дело с URL-адресом, таким как news.bbc.co.uk, он будет работать, но не для bbc.co.uk.

0 голосов
/ 03 февраля 2010

Попробуйте - это немного «многословно», но оно делает то, что вам нужно, с информацией, предоставленной в комментариях, и это будет работать для полного URL, включая HTTP и без, если у вас просто есть домен.

$domain = 'domain1.domain2.bbc.co.uk';
$array = explode('.', $domain);
$trash = array_pop($array);
$trash = array_pop($array);

$subdomain = join('.', $array);
print $subdomain;
0 голосов
/ 03 февраля 2010

Вы можете сделать это десятками способов.Это может выглядеть так:

$host = 'en.sub.domain.name';
$subdomain = implode('.', explode('.', $host, -2));

РЕДАКТИРОВАТЬ:

Это не будет работать с .co.uk, .com.pl, .gov.fr SLDs .Кажется, что самый простой способ удалить домен - создать массив из TLD и SLD , пройти через этот массив и, если $host заканчивается каким-либо элементом массива, вырезать последние n символови разорвать петлю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...