2013-04-16 3 views
22

что кто-то входит в URL, как это:Получить доменное имя от полного URL

http://i.imgur.com/a/b/c?query=value&query2=value 

И я хочу, чтобы вернуться: imgur.com

не i.imgur.com

Это код я прямо сейчас

$sourceUrl = parse_url($url); 
$sourceUrl = $sourceUrl['host']; 

Но это возвращает i.imgur.com

+0

уход делиться ?? – ramo

+0

как насчет того, что начинается «Вот способ получить РЕАЛЬНОЕ имя домена». – 2013-04-16 01:13:28

+0

См. Http://stackoverflow.com/questions/288810/get-the-subdomain-from-a-url – duskwuff

ответ

61

Проверьте приведенный ниже код, он должен хорошо выполнять эту работу.

<?php 

function get_domain($url) 
{ 
    $pieces = parse_url($url); 
    $domain = isset($pieces['host']) ? $pieces['host'] : $pieces['path']; 
    if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) { 
    return $regs['domain']; 
    } 
    return false; 
} 

print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk' 

?> 
+0

Это отлично работает! Спасибо! Я отмечу это как лучший ответ. – ramo

+3

Это * маленький * хитрый. Это приведет к возврату неверных результатов для субдоменов нДВУ первого уровня, таких как 'blah.blah.de'. Но нет никакого способа обойти это без использования публичного списка суффикса. – duskwuff

+0

Это не будет работать для 'www.domain.com' - parse_url() требуется протокол (http: //) для определения хоста, иначе это просто путь. Требуется вторичное условие под первым: '$ domain = (пусто ($ domain) && isset ($ pieces ['path']))? $ pieces ['path']: $ domain; ' –

-1
 if(substr_count($original_url, 'http://')) { 
    if(substr_count($original_url, 'www.')) { 
     // url style would be 'http://www.abc.xxx/page?param' or http://www.abc.xxx.xx/page?param 
     // extract 'abc' 
     $temp = explode('.', $original_url); 

     $store_url = $temp[1]; 
     // now 
     // $temp[2] = xxx or xxx/page?param 
     // $temp[3] = null or xx/page?param 

     //if ($temp[3] == null) { // then we are sure that $temp[2]== "xxx/page?param" 
        if(sizeof($temp) > 3) { 
      // extract "xxx" from "xxx/page?param" and append to store url so it will be "abc.xxx" 
      $temp = explode('/',$temp[2]); 
      $store_url .= '.'.$temp[0]; 
     } 
     else { 
      // then we are sure that $temp[2]== "xxx" and then $temp[3] == "xx/page?param" 
      //     or $temp[2]== xxx/page?stripped-link from second dot(.) 
      if(substr_count($temp[2], '/')) { // in case $temp[2]== xxx/page?stripped-link from second dot(.) 
       // extract "xxx" from "xxx/page?stripped-link" and appent to store url so it will be "abc.xxx" 
       $temp = explode('/',$temp[2]); 
       $store_url .= '.'.$temp[0]; // "abc".="xxx" ==> abc.xxx 
      } 
      else { // in case $temp[2]== "xxx" and then $temp[3] == "xx/page?param" 
       $store_url .= '.'.$temp[2]; // "abc".="xxx" ==> abc.xxx 
       // extract "xx" from "xx/page?param" and appent to store url so it will be "abc.xxx.xx" 
       $temp = explode('/',$temp[3]); 
       if(strlen($temp[0])==2) { 
        $store_url .= '.'.$temp[0]; 
       } 
      } 
     } 
    } 
    else { 
     // url style would be 'http://abc.xxx/page?param' or 'http://abc.xxx.xx/page?param' 
     // remove 'http://' 
     $temp = substr($original_url, 7); 
     // now temp would be either 'abc.xxx/page?param' or 'abc.xxx.xx/page?param' 
     // explode with '/' 
     $temp = explode('/', $temp); 
     $store_url = $temp[0]; 
    } 
} 
else if(substr_count($original_url, 'www.')) { 
    // url style would be 'www.abc.xxx/page?param' or 'www.abc.xxx.xx/page?param' 
    // remove 'www.' 
    $temp = substr($original_url, 4); 
    // now, $temp would be either "abc.xxx/page?param" or "abc.xxx.xx/page?param" 
    // explode with '/' 
    $temp = explode('/', $temp); 
    $store_url = $temp[0]; 
} 
else { 
    // url style would be 'abc.xxx/page?param' or 'abc.xxx.xx/page?param' 
    //explode with '/' 
    $temp = explode('/', $original_url); 
    $store_url = $temp[0]; 
} 
+0

Ummm ... что это? –

+0

Это функция получения имени хоста из URL.исходный url - ваш url и $ store_url return host url .. –

-6

использовать это:

$uri = "$_SERVER[REQUEST_URI]";<br> 
print($uri); 

Пример:

http://exemple.com/?directory<br> 
Result: 
/?diretory 

Команда получить каталог и не домен.

+0

Вопрос относится к URL-адресу пользователя, а не адресу, который они посещают. – robmcvey

-5

Если вы хотите только имя домена, выполните следующие действия:

$domain = $_SERVER['SERVER_NAME']; 

echo $domain; 
5

Вам нужен пакет, который с помощью Public Suffix List. Да, вы можете использовать строковые функции arround parse_url() или regex, но они будут приводить к некорректному результату в сложных URL-адресах.

Я рекомендую TLDExtract для домена синтаксического анализа, здесь приведен пример кода:

$url = 'http://i.imgur.com/a/b/c?query=value&query2=value'; 

parse_url($url, PHP_URL_HOST); // will return 'i.imgur.com' 

$extract = new LayerShifter\TLDExtract\Extract(); 
$result = $extract->parse($url); 
$result->getFullHost(); // will return 'i.imgur.com' 
$result->getSubdomain(); // will return 'i' 
$result->getRegistrableDomain(); // will return 'imgur.com' 
$result->getSuffix(); // will return 'com' 
1

Я нашел очень полезную библиотеку с помощью publicsuffix.org, PHP Domain Parser является на основе общественной Список Суффикс домена анализатор реализован в PHP ,

https://github.com/jeremykendall/php-domain-parser

<?php 
// this will do the job 

require_once '../vendor/autoload.php'; 

$pslManager = new Pdp\PublicSuffixListManager(); 
$parser = new Pdp\Parser($pslManager->getList()); 
var_dump($parser->getRegistrableDomain('www.scottwills.co.uk')); 
?> 

строка (16) "scottwills.co.uk"

Смежные вопросы