2

我有以下代码:

$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)

对于上述网址,但不适用于其他更简单的网址。这是一个错误吗?您甚至可以访问该图像。

最重要的是解决方案是什么?

谢谢

4

4 回答 4

5

PHP < 5.2.13 包含一个错误,FILTER_VALIDATE_URL它认为 url 包含“-”(http://bugs.php.net/51192)。您要么需要升级您的 php 副本,要么使用不同的过滤机制。

于 2011-04-28T17:47:50.050 回答
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 中,此错误报告中的更多信息: http ://bugs.php.net/bug.php?id=51192

于 2010-05-27T14:33:19.787 回答
1

该代码打印“有效!” 为了我。您使用的是什么版本的 PHP?您能否发布指向 PHP 页面的链接,其中包含:

<?php phpinfo(); ?>

另外,请参阅这个问题

于 2010-04-07T23:17:29.383 回答
0

来自http://www.php.net/get/php-5.3.2.tar.bz2/from/a/mirror的源存档包含一个奇怪的 ext/filter/logical_filter.c 版本,我不能在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
非常奇怪而且非常错误。

于 2010-04-08T00:51:31.403 回答