2014-09-04 72 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))