Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Нужна помощь в функции
цитата
04/07/12 в 16:50
 Lexikon
Этой функцией выдергиваю домен из url но вот проблема в том что если юрл попадается написаный через тире. Т.е. best-domain.com скрипт выдаст domain.com, теряется та чать которая перед тире. icon_confused.gif

function domain($str){                                                   // ФУНКЦИЯ ПОЛУЧЕНИЯ ДОМЕНА ИЗ URL.
$domain = parse_url($str);
preg_match_all("/(\w+)/i", $domain["host"], $arr, PREG_PATTERN_ORDER);
$res = array_reverse($arr[0]);
$result = "$res[1].$res[0]";
$result = strtolower($result);
return $result;
}
цитата
04/07/12 в 16:52
 atrius
http://php.net/manual/ru/function.parse-url.php
не оно?
цитата
04/07/12 в 16:56
 Privater666
parse_url smail54.gif
цитата
04/07/12 в 17:20
 Lexikon
да, тут можно сделать так:

<?php

function domain($str){                                                   
$domain = parse_url($str);
$result = $domain['host'];
return $result;
}


$url = "https://www.master-x.com/forum/postings/2287090/";

echo domain($url);

?>

но если юрл будет:
$url = "http://www.sub.master-x.com/forum/postings/2287090/";
or
$url = "https://www.master-x.com/forum/postings/2287090/";

то скрипт выдаст:
sub.master-x.com
master-x.com
А мне нужно получить чистый:
master-x.com
цитата
04/07/12 в 17:30
 Lexikon
посидел покумекал вышло так:

<?php

function domain($str){                                                   
$domain = parse_url($str);
$domain = $domain['host'];
$arr_domain = explode(".", $domain);
$res = array_reverse($arr_domain);
$result = "$res[1].$res[0]";
$result = strtolower($result);
return $result;
}


$url = "http://www.sub.master-x.com/forum/postings/2287090/";

echo domain($url);

?>

но тут есть одно НО, если ЮРЛ который отправляется на обработку будет выглядеть так:

domain-x.com.ua
то скрипт выдаст:
com.ua
цитата
04/07/12 в 18:13
 prlog
<?php

function domain($str){                                                   
$domain = parse_url($str);
$domain = $domain['host'];
$arr_domain = explode(".", $domain);
$res = array_reverse($arr_domain);
if(strlen($res[1])<4)
{
   $result = "$res[2].$res[1].$res[0]";
}
else
{
   $result = "$res[1].$res[0]";
}
$result = strtolower($result);
return $result;
}


$url = "http://www.sub.master-x.com/forum/postings/2287090/";

echo domain($url);

?>
цитата
04/07/12 в 18:51
 Yacc
Код:
public function get_domain( $url ) {
   // http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1
   $tlds = array(
      'com' => true,
      'net' => true,
      'org' => true,
      'com.ua' => true
   );
   $host = parse_url( $url, PHP_URL_HOST );
   $arr = array( false );
   foreach( $tlds as $tld => $allow )
      if( $allow AND ( $pos = stripos( $host, $tld ) ) === strlen( $host ) - strlen( $tld ) ) {
         $arr = explode( '.', substr( $host, 0, $pos - 1 ) );
         break;
      }
   return end( $arr );
}
цитата
04/07/12 в 19:38
 Noobus Boobus
я ограничиваюсь

Код:

str_replace('www.', '', strtolower(parse_url($url, PHP_URL_HOST)))


Но вообще список доменов первого уровня (в том числе составного гумна типа com.ua) можно взять еще, он не так часто меняется.
цитата
05/07/12 в 02:49
 Nux
примерно так должно быть.

Код:

function domain($str){                                                   
        $domain = parse_url($str);
        preg_match("/([a-z0-9-_]{2,63}\.[a-z\.]{2,6})$/i",$domain['host'],$matches);
        $result = $matches['1'];

        return $result;
}


$url = "https://www.master-x.com/forum/postings/2287090/";

echo domain($url);


Эта страница в полной версии