在php中验证url

时间:2014-09-04 05:34:10

标签: php validation

我在php中有以下似乎简单的代码;但问题是它显示所有有效链接为"无效#34 ;;任何帮助表示赞赏:

<?php
   $m = "urllist.txt";
   $n = fopen($m, "r");
   while (!feof($n)) {
      $l = fgets($n);
      if (filter_var($l, FILTER_VALIDATE_URL) === FALSE) {
          echo "NOT VALID - $l<br>";
      } else {
          echo "VALID - $l<br>";
      }
   }
   fclose($n);
?>

4 个答案:

答案 0 :(得分:3)

fgets()返回的字符串包含一个尾部换行符,需要先修剪它才能验证它。试试下面的代码,我希望这会对你有所帮助:

<?php
  $m = "urllist.txt";
  $n = fopen($m, "r");
  while (!feof($n)) {
    $l = fgets($n);
    if(filter_var(trim($l), FILTER_VALIDATE_URL)) {
      echo "VALID - $l<br>";
    } else {
      echo "NOT VALID - $l<br>";
    }      
  }
  fclose($n);
?>

我尝试过以下网址:

http://stackoverflow.com/
https://www.google.co.in/
https://www.google.co.in/?gfe_rd=cr&ei=bf4HVLOmF8XFoAOg_4HoCg&gws_rd=ssl
www.google.com
http://www.example.com
example.php?name=Peter&age=37

并获得以下结果:

VALID - http://stackoverflow.com/ 
VALID - https://www.google.co.in/ 
VALID - https://www.google.co.in/?gfe_rd=cr&ei=bf4HVLOmF8XFoAOg_4HoCg&gws_rd=ssl 
NOT VALID - www.google.com 
VALID - http://www.example.com 
NOT VALID - example.php?name=Peter&age=37 

答案 1 :(得分:0)

也许你在每行'\ n'

的末尾都有一些符号

我认为你可以在验证$ l之前使用trim函数:

filter_var(trim($l), FILTER_VALIDATE_URL) === TRUE

也许这会对你有帮助。

答案 2 :(得分:0)

试试这段代码。它一定很有帮助。我已经测试了它和它的工作。

<?php
    $m = "urllist.txt";
    $n = fopen($m, "r");
    while (!feof($n)) {
        $l = fgets($n);
        if(filter_var(trim($l), FILTER_VALIDATE_URL)) {
            echo "URL is not valid";
        }
        else{
            echo "URL is valid";
        }
    }
    fclose($n);
?>

以下是DEMO

答案 3 :(得分:0)

请尝试使用不同的过滤器来查看失败的位置:

  • FILTER_FLAG_SCHEME_REQUIRED - 要求网址是符合RFC的网址 (如http:// example)
  • FILTER_FLAG_HOST_REQUIRED - 需要网址 包括主机名(如http:// www.example.com)
  • FILTER_FLAG_PATH_REQUIRED - 要求网址后面有路径 域名(如www.example.com/example1/test2 /)
  • FILTER_FLAG_QUERY_REQUIRED - 要求网址具有查询字符串 (如“example.php?name = Peter&amp; age = 37”)

(cc http://www.w3schools.com/php/filter_validate_url.asp

你也可以尝试好的旧正则表达式:

if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$url))