it-swarm.com.ru

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

26
ramo

Проверьте код ниже, он должен хорошо работать.

<?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'

?>
70
stanev01

Вам нужен пакет, который использует 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'
6
Alexander Fedyashov

Я нашел очень полезную библиотеку, использующую publicsuffix.org, PHP Domain Parser - это анализатор доменов на основе Public Suffix List, реализованный на 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"

2
Muhammad Sanaullah

Код ниже должен быть идеальным для работы.

function get_domain($url){
  $charge = explode('/', $url);
  $charge = $charge[2]; //assuming that the url starts with http:// or https://
  return $url;
}

echo get_domain('http://www.example.com/example.php');
0
DMVerfurth