FILTER_VALIDATE_URL不起作用

时间:2015-07-05 01:14:44

标签: php validation url

我正在尝试编写一些可以检查网址是否存在并且正在运行的php。我遇到了一个问题,这是我的代码:

        if(!filter_var($url, FILTER_VALIDATE_URL) === false)
        {
            //Trouve l'host
            $hostname=parse_url($url, PHP_URL_HOST);

            //Tente de trouver l'adresse IP de l'host
            if (gethostbyname($hostname) !== $hostname)
            {
                //Cherche les données de l'entête
                $headers=get_headers($url);

                //Tente de trouver une erreur 404
                if(!strpos($headers[0], '404'))
                {
                    return;
                }
            }
        }

第一行应该检查我的url是否至少有效并且我的其余代码正确检查主机是否存在以及该链接没有给我一个错误404,但它认为我的地址是O.K.如果我写的话:

(绝对任意)://www.google.com

为什么?

1 个答案:

答案 0 :(得分:3)

您的代码是正确的,尽管它很难阅读。相反,阅读下面的代码要容易得多:

filter_var

问题是http://似乎接受任何协议。根据{{​​3}}页面:

  

请注意,有效的URL可能未指定HTTP协议ssh://,因此可能需要进一步验证以确定URL使用预期协议,例如mailto:filter_var

例如,请参阅Validate filters

您最好的选择是为MyPopup.CustomPopupPlacementCallback = popupFixCentered; 补充可接受协议的附加测试,或使用正则表达式来验证您的网址。