2010-06-21 113 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