验证URL PHP

时间:2013-06-21 16:54:06

标签: php http url

我正在研究一个项目,在这个项目中我需要检查用户输入是否是有效的URL。

我为URL上使用的所有可能字符创建了一个preg_match。但是,如果HTTP:// / HTTPS://不在URL前面,我试图让它显示错误。

这就是我所做的。

if(preg_match('/[^0-9a-zA-Z.\-\/:?&=#%_]/', $url) || substr($url, 0, 7) != "http://" || substr($url, 0, 8) != "https://") {

但这不起作用。它一直给我一个好消息。我不确定我在这里做错了什么,我希望能得到一些帮助!

if语句将返回true或false。所以

    if(preg_match('/[^0-9a-zA-Z.\-\/:?&=#%_]/', $url) || substr($url, 0, 7) != "http://" || substr($url, 0, 8) != "https://") {
echo "true";
} else {
echo "false";
}

我只需要检查网址是否输入了有效的网址。我不需要验证它。只需要检查它是否具有HTTP://或HTTPS://并包含有效的URL字符。

4 个答案:

答案 0 :(得分:14)

而不是正则表达式,您可以让自己轻松自如,并在filter_var中使用网址过滤:

if (filter_var($url, FILTER_VALIDATE_URL)) { ...

答案 1 :(得分:7)

或者,您可以在没有正则表达式的情况下执行此操作。虽然您还需要验证url imag http://">bla</a><script>alert('XSS');</script>作为url

传递的值
<?php
$url = 'http://example.com';

if(in_array(parse_url($url, PHP_URL_SCHEME),array('http','https'))){
    if (filter_var($url, FILTER_VALIDATE_URL) !== false) {
        //valid url
    }else{
        //not valid url
    }
}else{
    //no http or https
}
?>

答案 2 :(得分:0)

您尚未显示完整的相关代码。所以,不确定,为什么它不适合您,但对于URL验证,您可以检查下面的线程链接的详细讨论:

PHP validation/regex for URL

答案 3 :(得分:0)

要使用网站网址验证用户输入,允许使用或不使用方案,使用或不使用www,然后在视图中添加方案以设置为外部网址。

    $withWww = 'www.' . str_replace(array('www.'), '', $value);
    $withScheme = 'http://' . str_replace(array('http://', 'htttps://'), '', $withWww);
    $headers = @get_headers($withScheme);
    if (strpos($headers[0], '200') === false) {
        return false;
    }