52

我想知道这是否是检查字符串是否只包含 URL 的正确方法:

if (stripos($string, 'http') == 0 && !preg_match('/\s/',$string)) {
  do_something();
}

stripos() 检查字符串是否以“http”开头
preg_match() 检查字符串是否包含空格

如果不是这样,我假设该字符串只不过是一个 URL - 但该假设是否有效?有没有更好的方法来实现这一目标?

4

3 回答 3

158

采用filter_var()

if (filter_var($string, FILTER_VALIDATE_URL)) { 
  // you're good
}

过滤器可以更加精细。有关更多信息,请参阅手册

于 2013-02-21T20:24:26.300 回答
10

在 PHP 中有一种更好的方法来验证 URL http://www.php.net/manual/en/function.filter-var.php

if(filter_var('http://example.com', FILTER_VALIDATE_URL)))
    echo 'this is URL';
于 2013-02-21T20:25:55.360 回答
1

为了更安全地验证 URL(以及那些“非 ascii”),您可以

  1. 检查过滤器(请务必查看适合您情况的过滤器的手册)

  2. 检查是否有DNS记录

    $string = idn_to_ascii($URL);
    if(filter_var($string, FILTER_VALIDATE_URL) && checkdnsrr($string, "A")){
        // you have a valid URL
    } 
    
于 2018-11-23T13:26:56.113 回答