2010-06-21 110 views
1

我需要一些函数来检查给定的值是否为url。如何检查给定的值是否是有效的URL

我有代码:

<?php 
$string = get_from_db(); 
list($name, $url) = explode(": ", $string); 
if (is_url($url)) { 
    $link = array('name' => $name, 'link' => $url); 
} else { 
    $text = $string; 
} 
// Make some things 
?> 
+0

看看这对你的作品:http://stackoverflow.com/questions/2390275/php-regex-for-validating-a -url – MacAnthony 2010-06-21 13:52:15

+0

可能的重复:http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to-check-if-a-string-is-a-valid-url – 2010-06-21 13:52:29

+1

不是愚蠢 - 这两个人要求一个正则表达式,而这一个不是。 – nickf 2010-06-21 14:05:30

回答

7

如果你正在运行PHP 5(!你应该是),只需使用filter_var()

function is_url($url) 
{ 
    return filter_var($url, FILTER_VALIDATE_URL) !== false; 
} 

附录:如the PHP manual entry for parse_url()(和@Liutas在他的评论)指出:

此功能是不是旨在验证给定的URL,它只是将其分解成上述部分。部分网址也被接受,parse_url()尽力解析正确。

例如,parse_url()将查询字符串视为URL的一部分。但是,查询字符串是而不是完全是一个URL。下面的一行代码:

var_dump(parse_url('foo=bar&baz=what')); 

输出这样的:

array(1) { 
    ["path"]=> 
    string(16) "foo=bar&baz=what" 
} 
+1

你也可以指定一些选项(需要路径或查询):http://www.php.net/manual/en/filter.filters.validate.php – 2010-06-21 13:59:15

+0

绝对是最好的解。我目前的项目包含一个非常长的正则表达式来检查有效的URL,并且明天它将被替换为这个。谢谢! – nickf 2010-06-21 14:04:48

+0

感谢这是我寻找的。 – Liutas 2010-06-21 14:05:52

3

使用parse_url和检查虚假

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_PATH); 
?> 

上面的例子将输出:

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 
/path 
+3

但在manula中它说:“这个函数并不是要验证给定的URL,它只是将其分解成上面列出的部分,部分URL也被接受,parse_url()尽力解析它们。” – Liutas 2010-06-21 13:54:09

+0

超越这是验证URL的最佳方式是发出HTTP请求并查看响应是否有效。 – Pentium10 2010-06-21 14:00:08

+0

我不能这样做,因为这可能是敏感的url – Liutas 2010-06-21 14:07:05