Php 为什么仅针对此URL筛选\u验证\u URL返回FALSE?
我有以下代码:Php 为什么仅针对此URL筛选\u验证\u URL返回FALSE?,php,filter-var,Php,Filter Var,我有以下代码: $url = "http://icons3.iconfinder.netdna-cdn.com/data/icons/pool/poolbird.png"; if (filter_var ($url, FILTER_VALIDATE_URL) === FALSE) { echo "Invalid Url"; exit; } else { echo "Works!"; } 这将显示: 无效url(错误) 用于上面的url,但不用于其他更简单的url
$url = "http://icons3.iconfinder.netdna-cdn.com/data/icons/pool/poolbird.png";
if (filter_var ($url, FILTER_VALIDATE_URL) === FALSE) {
echo "Invalid Url";
exit;
} else {
echo "Works!";
}
这将显示:
无效url(错误)
用于上面的url,但不用于其他更简单的url。这是虫子吗?您甚至可以访问该图像
最重要的是这个问题的解决方案是什么
谢谢代码为我打印了“工作!”。您使用的是什么版本的PHP?您是否可以发布一个指向包含以下内容的PHP页面的链接:
另外,请参阅。中的源存档包含ext/filter/logical_filter.c的奇怪版本,我在中找不到该版本。
此版本对url的主机部分执行“额外”测试
e = url->host + strlen(url->host);
s = url->host;
while (s < e) {
if (!isalnum((int)*(unsigned char *)s) && *s != '_' && *s != '.') {
goto bad_url;
}
s++;
}
e=url->host+strlen(url->host);
s=url->host;
而(s
它不允许在主机名中使用连字符,如icons3.iconfinder.netdna cdn.com中的连字符非常奇怪,也非常错误。运行PHP 5.2.13时,我在尝试筛选有效URL时得到以下响应:
php > var_dump(filter_var("http://www.asdf-asdf.com", FILTER_VALIDATE_URL));
bool(false)
这显然不是我所期望的结果。域是有效的
这显然已经被修复,并将包含在PHP 5.3.3和5.2.14中,更多信息见本bugreport:
PHP<5.2.13在
FILTER\u VALIDATE\u URL
中包含一个错误,该错误考虑了包含'-'()的URL。您要么需要升级php副本,要么使用不同的过滤机制