2014-09-04 4 views
0

У меня есть следующий код: простой код в php; но ptoblem состоит в том, что он показывает все допустимые ссылки как «недействительные»; любая помощь приветствуется:Validate url in php

<?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-адрес сохраняется в файле? Если у вас более одного URL-адреса в одной строке или нескольких символов в конце строки, которые должны показать вам, что теперь новый URL-адрес, они будут всегда НЕ VALID – Baalthasarr

+0

Я проверил их по одному и тому же коду один за другим, и они действует; Я проверил файл и очистил его; Я прошел проверку, ничего не похоже на текстовый файл. – Abbas1999

+0

просто эхо переменная $ l. то вы можете понять тип url –

ответ

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

Я пытался со следующими URLs:

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 и «принято» :) –

+0

trim() необходимо, потому что, читая строки из текстового файла, в конце каждой строки добавляется одно пространство. –

0

может быть, у вас есть какие-либо символы в конце каждой строки «\ п»

Я думаю, вы можете просто использовать декоративную функцию до подтверждения $ 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

Он дал такие же результаты; мой код дал следующие результаты: NOT VALID - http // www.google.com NOT VALID - http // www.bing.com NOT VALID - http // www.yahoo.com NOT VALID - http: //www.michaelking.ca/ NOT VALID - http://michaelking.ca/ NOT VALID - http://www.mekdam.com/ НЕ ДЕЙСТВИТЕЛЬНО - http://mekdam.com/ VALID - http : //oilpainting.mkzg.com/ Ваш код дал: URL недействителенURL недействителенURL недействителенURL недействителенURL недействителенURL недействителенURL недействителенURL действителен – Abbas1999

+0

вы проверили демо? –

+0

Демонстрация - это не тот же код. Проблема была в 'fgets()'. –

0

Пожалуйста, попробуйте с различные фильтры доступны, чтобы увидеть, где он не работает:

  • FILTER_FLAG_SCHEME_REQUIRED - Требуется URL, чтобы быть совместимым URL RFC (например, 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)

Вы можете попробовать старые добрые регулярные выражения тоже:

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