Запуск parse_url () в строке, которая не может содержать протокол

Я пытаюсь получить доменное имя и 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: //, если нет протокола.