我有以下代码:
$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!";
}
显示:
无效网址(FALSE)
表示上述网址,但不适用于其他更简单的网址。这是一个错误吗?你甚至可以访问图像。
最重要的是解决方案是什么?
由于
答案 0 :(得分:5)
PHP< 5.2.13包含FILTER_VALIDATE_URL
中的一个错误,该错误会考虑包含“ - ”(http://bugs.php.net/51192)的网址。您需要升级您的php副本或使用不同的过滤机制。
答案 1 :(得分:1)
答案 2 :(得分:1)
运行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中,更多信息在这个bug报告中: http://bugs.php.net/bug.php?id=51192
答案 3 :(得分:0)
来自http://www.php.net/get/php-5.3.2.tar.bz2/from/a/mirror的源存档包含一个奇怪版本的ext / filter / logical_filter.c,这是我在the cvs中找不到的版本。 此版本对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++;
}
不允许在主机名中使用连字符,如icons3.iconfinder.netdna - cdn.com
非常奇怪而且非常错误。