3

我正在尝试使用 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

4

2 回答 2

0

如果您报告的错误有任何问题,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"是否未提供协议。

于 2013-05-02T12:19:37.637 回答
0

我有一个用于更严格的 URL 验证的小类。还不如把它放到公共领域:

https://github.com/franksrevenge/StrictUrlValidator

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

于 2013-05-02T14:22:54.320 回答