2014-09-04 29 views
0

我在php下面看起来很简单的代码;但是问题在于它将所有有效的链接显示为“无效”;任何帮助赞赏:在php中验证url

<?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); 
?> 
+0

如何的URL保存在文件中?如果您在一行中包含多个网址,或者在行尾有一些字符会显示新网址,则它们将始终为无效 – Baalthasarr 2014-09-04 05:37:04

+0

我在相同的代码中逐一检查它们,它们是有效;我检查了这个文件并清理了它;我经历了这个检查,没有任何文字文件错误。 – Abbas1999 2014-09-04 05:38:31

+0

只是回显变量$ l。那么你可以了解它的类型 – 2014-09-04 05:43:48

回答

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); 
?> 

我有以下URL尝试:

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 
+0

感谢+1和“接受”:) – 2014-09-04 06:09:33

+0

trim()是必需的,因为在从文本文件中读取行时,每行的末尾会添加一个空格。 – 2014-09-04 09:53:41

0

也许你在每一行的末尾有一些符号“\ n”

我想你可以使用裁剪功能之前验证$ L这样的:

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

也许这会帮助你。

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

+0

的URL它给出了相同的结果;我的代码给出了以下结果: 无效 - http // www.google.com 无效 - http // www.bing.com 无效 - http // www.yahoo.com 无效 - http: //www.michaelking.ca/ 无效 - http://michaelking.ca/ 无效 - http://www.mekdam.com/ 无效 - http://mekdam.com/ VALID - http ://oilpainting.mkzg.com/ 您的代码给出了: URL不是有效的URL不是有效的URL不是有效的URL不是有效的URL不是有效URL不是有效的URL不是有效的URL不是有效URL有效 – Abbas1999 2014-09-04 06:00:39

+0

你检查过演示吗? – 2014-09-04 06:01:24

+0

演示代码不一样。问题出在'fgets()'上。 – 2014-09-04 08:27:59

0

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

  • FILTER_FLAG_SCHEME_REQUIRED - 需要URL是符合RFC URL (如http://示例)
  • FILTER_FLAG_HOST_REQUIRED - 要求的URL 包括主机名(如http:// www.example.com)
  • FILTER_FLAG_PATH_REQUIRED - 需要URL在 域名(例如www。 example.com/example1/test2/)
  • FILTER_FLAG_QUERY_REQUIRED - 需要URL有查询字符串 (如 “使用example.php名=彼得&年龄= 37?”)

(的http://www.w3schools.com/php/filter_validate_url.asp CC)

您可以尝试历久弥新的正则表达式太:

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