Получить доменное имя из полного 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

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

 <?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}\.[az\.]{2,6})$/i', $domain, $regs)) { return $regs['domain']; } return false; } print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk' ?> 

Вам нужен пакет, в котором используется 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' 

Я нашел очень полезную библиотеку с использованием 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"

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

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

 $domain = $_SERVER['SERVER_NAME']; echo $domain; 

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

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

Пример:

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

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