在可能不包含协议的字符串上运行parse_url()

时间:2013-10-25 19:22:23

标签: php url parse-url

我正在尝试从用户输入的URL字符串中获取域名和TLD(没有子域名),该字符串可能包含也可能没有协议,目录,子域,文件名等。

换句话说,给定以下任何一项:

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无法在这种情况下获得主机?

1 个答案:

答案 0 :(得分:3)

根据定义,URL包含协议或方案。检查//如果不存在,则检查//字符串。这可能在PHP< 5.4.7所以如果没有协议,可以添加http://。