为什么parse_url在这种情况下返回空字符串?parse_url为url返回空字符串:'www.example.com'
<?php
$url='www.example.com';
$var= parse_url($url,PHP_URL_HOST);
print_r($var);
为什么parse_url在这种情况下返回空字符串?parse_url为url返回空字符串:'www.example.com'
<?php
$url='www.example.com';
$var= parse_url($url,PHP_URL_HOST);
print_r($var);
的字符串被解释为相对URL:
// print_r(parse_url('www.vtechpcsupport.com'))
Array
(
[path] => www.vtechpcsupport.com
)
是的,但奇怪的是['parse_url'](http://php.net/parse_url#refsect1-function.parse-url-notes)文档声明:“此函数不适用于相对URL。”看起来这不是“严重畸形的URL”;) – 2012-02-29 15:04:45
它也说“部分网址也被接受,parse_url()会尽最大努力正确解析它们。” – Andy 2012-02-29 15:14:23
@Juicy:Mmh。也许它比它声称的更聪明。如果我尝试'www.vtechpcsupport.com?foo = bar',它可以正确标识'foo = bar'作为查询字符串。 – 2012-02-29 15:16:49
这是由于事实www.vtechpcsupport.com
是不是真的,因为它的URL缺少scheme
部分(HTTP
左右),尝试这样的:
$url = 'http://www.vtechpcsupport.com';
$var = parse_url($url,PHP_URL_HOST);
print($var);
这是一个URL,但没有一个与主机。 – Gumbo 2012-02-29 14:54:56
@Gumbo,它真的没有;)[常规URL语法](http://tools.ietf.org/html/rfc1738#section-2) – 2012-02-29 14:57:10
@Gumbo:只是因为浏览器默认为http为裸露的主机名doesn'让它成为一个网址 - 一个正确的网址需要一个方案。例如如果这实际上是'ftp.vtechpcsupport.com',并且没有运行Web服务器呢? – 2012-02-29 14:58:16
这是因为www.vtechpcsupport .com不是一个完整的网址。
您正在指定PHP_URL_HOST,因此该函数会尝试仅提取URL的主机部分,该URL不存在,因为没有给定协议,URL被视为相对的 - 因此,您希望成为主机名称被解释为(相对)路径。
尝试使用:
$url='http://www.vtechpcsupport.com';
,你应该得到你所期望的行为。
尝试增加在HTTP URL的前面? – Alex 2012-02-29 14:53:34