Я пытаюсь получить доменное имя и TLD (без субдомена) из строки URL-адреса пользователя, которая может иметь или не иметь протокол, каталоги, поддомены, имена файлов и т. Д.
Другими словами, учитывая любое из следующего:
example.com www.example.com sub.example.com example.com/whatever/hey.html http://example.com https://subdomain.example.com ftp://example.com/whatever/hey.html
Я должен всегда заканчивать: example.com
.
Сейчас это то, что я делаю:
$hostParts = explode('.', parse_url($URL, PHP_URL_HOST)); $tld = array_pop($hostParts); $domain = array_pop($hostParts); $domain = $domain . "." . $tld;
Однако, если URL-адрес предоставляется без протокола, он прерывается. Почему parse_url
не может получить хост в этой ситуации?
По определению URL содержит протокол или схему. Проверьте, чтобы // и если нет, добавьте // в строку. Это может быть другим в PHP <5.4.7, поэтому, возможно, добавить http: //, если нет протокола.