2012-02-29 40 views

回答

2

的字符串被解释为相对URL

// print_r(parse_url('www.vtechpcsupport.com')) 
Array 
(
    [path] => www.vtechpcsupport.com 
) 
+0

是的,但奇怪的是['parse_url'](http://php.net/parse_url#refsect1-function.parse-url-notes)文档声明:“此函数不适用于相对URL。”看起来这不是“严重畸形的URL”;) – 2012-02-29 15:04:45

+0

它也说“部分网址也被接受,parse_url()会尽最大努力正确解析它们。” – Andy 2012-02-29 15:14:23

+1

@Juicy:Mmh。也许它比它声称的更聪明。如果我尝试'www.vtechpcsupport.com?foo = bar',它可以正确标识'foo = bar'作为查询字符串。 – 2012-02-29 15:16:49

2

这是由于事实www.vtechpcsupport.com是不是真的,因为它的URL缺少scheme部分(HTTP左右),尝试这样的:

$url = 'http://www.vtechpcsupport.com'; 
$var = parse_url($url,PHP_URL_HOST); 
print($var); 
+1

这是一个URL,但没有一个与主机。 – Gumbo 2012-02-29 14:54:56

+1

@Gumbo,它真的没有;)[常规URL语法](http://tools.ietf.org/html/rfc1738#section-2) – 2012-02-29 14:57:10

+0

@Gumbo:只是因为浏览器默认为http为裸露的主机名doesn'让它成为一个网址 - 一个正确的网址需要一个方案。例如如果这实际上是'ftp.vtechpcsupport.com',并且没有运行Web服务器呢? – 2012-02-29 14:58:16

1

这是因为www.vtechpcsupport .com不是一个完整的网址。

您正在指定PHP_URL_HOST,因此该函数会尝试仅提取URL的主机部分,该URL不存在,因为没有给定协议,URL被视为相对的 - 因此,您希望成为主机名称被解释为(相对)路径。

尝试使用:

$url='http://www.vtechpcsupport.com'; 

,你应该得到你所期望的行为。