Извлечение домена из URL-адреса (включая жесткие)

Я пытаюсь написать (или просто найти существующий) PHP-метод, который может взять ссылку и извлечь URL-адрес. Фокус в том, что он должен держаться под тяжестью странных перспективных доменов, таких как:

www.champa.kku.ac.th 

Глядя на это сам с человеческими глазами, я до сих пор догадывался об этом неправильно: считал, что домен будет kku.ac.th но это дает ошибку dns при посещении.

Поэтому любой знает, как можно надежно извлечь домен из URL:

 http://site.com/hello.php http://site.com.uk/hello.php http://subdomain.site.com/hello.php http://subdomain.site.com.uk/hello.php http://www.champa.kku.ac.th/hello.php // and even the one I couldn't tell 

PHP имеет функцию parse_url () , которая поможет вам выполнить основное разделение на протокол, хост, порт и т. Д.

Что касается извлечения «правильного» домена в неопределенных случаях, это очень сложно сказать, потому что иногда «двухчастные ДВУ» являются мерой авторитета ДВУ (например, в Великобритании), а иногда и частными предприятиями (например, .uk.com ). Я думаю, вы не будете поддерживать списки доменов верхнего уровня, которые имеют две части, такие как

  • .co.uk
  • .ac.uk
  • .ac.th

эти окончания будут обрабатываться как TLD (домены верхнего уровня), проглатывая вторую часть.

Это единственный способ достоверно рассказать обо всех «двухчастных TLD», таких как .co.uk – где server1.ibm.co.uk (где нужно удалить двухкомпонентную .co.uk для определения самого домена) из регулярные поддомены, такие как server1.ibm.com (где .com нужно удалить).

Хорошей отправной точкой для получения списка многих важных «двухчастных TLD» является поиск домена на speednames.com (выберите «все» в странах). Более полный список можно найти как часть библиотеки ruby ​​domainatrix .

Может быть, здесь может помочь функция parse_url ?

В вашем случае, с этими URL-адресами, следующая часть кода:

 echo parse_url('http://site.com/hello.php', PHP_URL_HOST) . '<br />'; echo parse_url('http://site.com.uk/hello.php', PHP_URL_HOST) . '<br />'; echo parse_url('http://subdomain.site.com/hello.php', PHP_URL_HOST) . '<br />'; echo parse_url('http://subdomain.site.com.uk/hello.php', PHP_URL_HOST) . '<br />'; echo parse_url('http://www.champa.kku.ac.th/hello.php', PHP_URL_HOST) . '<br />'; 

Дает этот результат:

 site.com site.com.uk subdomain.site.com subdomain.site.com.uk www.champa.kku.ac.th 

С Ruby вы можете использовать библиотеку / драгоценность Domainatrix

http://www.pauldix.net/2009/12/parse-domains-from-urls-easily-with-domainatrix.html

 требуют «рубигемы»
 требуют «domainatrix»
 s = 'http://www.champa.kku.ac.th/dir1/dir2/file?option1&option2'
 url = Domainatrix.parse (s)
 url.domain
 => "kku"

отличный инструмент! 🙂