我在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);
?>
答案 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)
请尝试使用不同的过滤器来查看失败的位置:
(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))