2010-03-26 2 views
4

Я пытаюсь написать (или просто найти существующий) PHP-метод, который может взять ссылку и извлечь URL-адрес. Хитрость заключается в том, что нужно держать под тяжестью странного вида доменов нравится:Извлечение домена из 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 
+0

whois говорит, что kku.ac.th является доменом. Я предполагаю, что они не настроили правильную запись DNS, запрошенную для веб-браузеров (в отличие от MX и т. Д.). –

+0

Я думаю, что запись была термином, который я искал! –

+0

@Martin, Спасибо, что указали это. – karl

ответ

5

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

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

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

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

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

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

+0

Я думал об одном и том же: «Я думаю, что вы не будете поддерживать списки доменов верхнего уровня, которые состоят из двух частей» Есть ли список? Я пробовал википедию и мог найти только обычный список. Http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains – karl

+0

@karl. Я не думаю, что есть официальный список, потому что многие из них - частные предприятия. Проверьте версии, у них есть много «двухчастных TLD» в своем портфолио. Я думаю, это хорошее начало. –

5

Может быть, функция 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 
+0

Спасибо, Паскаль, который решает некоторые из моих проблем, большое спасибо, но это не совсем то, о чем я беспокоился. Пекка пригвозждает его больше, поэтому я, скорее всего, выберу его ответ для будущих читателей. – karl

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