【问题标题】:Why FILTER_VALIDATE_URL return FALSE for only this url?为什么 FILTER_VALIDATE_URL 只为这个 url 返回 FALSE?
【发布时间】:2010-04-07 23:07:51
【问题描述】:

我有以下代码:

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

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

最重要的是解决这个问题的方法是什么?

谢谢

【问题讨论】:

    标签: php filter-var


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      <?php phpinfo(); ?>

      另外,请参阅this question

      【讨论】:

        【解决方案3】:

        运行 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

        【讨论】:

          【解决方案4】:

          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
          很奇怪也很错误。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-12
            • 2012-07-09
            • 2010-11-28
            • 2016-12-05
            • 1970-01-01
            相关资源
            最近更新 更多