var对URL不正确

我试图使用filter_var来验证用户输入的URL,但它似乎不适用于所有情况。 我前段时间在PHP.net上请求了一个修复程序,但无济于事。

除了正则表达式(是的,有一些已经发布在stackoverflow上),是否有PHP版本可以工作或者其他方法?

我面临的问题是下面的字符串得到验证,不应该:

http://http://www.google.com

测试脚本:

$url = $_REQUEST['url'];

if (filter_var("http://" . $url, FILTER_VALIDATE_URL)) 

   $filter="true"; 

else 

   $filter="false";

echo "Filter var result of concat with http is:" . $filter . "<br>";

预期结果:

我希望它在我用http://www.google.com运行脚本时返回false,当我使用www.google.com运行脚本时它是true

实际结果:

它在两种情况下均返回true


如果你报告的错误是任何事情,filter_var()通过解析parse_url()来验证url,并检查结果数组是否合理。

因此,如果你想要更严格的东西,将它们粘合在一起并确认它们是平等的。

这是一个合理的glue_url函数:

http://doc.habariproject.org/inputfilter_8php_source.html#l00324

然后:

$valid_url = ($url == glue_url(parse_url($url)));

或者,如果没有协议提供,请检查"http://$url"


我有一个我用于更严格URL验证的小课程。 不妨将其纳入公有领域:

https://github.com/franksrevenge/StrictUrlValidator

它依赖于一些逻辑测试,然后通过测试给定的主机名是否存在,甚至通过查询服务器的URL状态码来增加侵入性。 当然,远程查询的行为是可配置的。

链接地址: http://www.djcxy.com/p/92701.html

上一篇: var incorrect for URLs

下一篇: PHP filter