-4

我正在做一个项目,在这个项目中我需要检查用户输入是一个有效的 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";
}

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

4

4 回答 4

14

代替正则表达式,您可以让事情变得简单,并使用filter_var中的 URL 过滤:

if (filter_var($url, FILTER_VALIDATE_URL)) { ...
于 2013-06-21T17:00:34.373 回答
7

或者,您可以在没有正则表达式的情况下执行此操作。尽管您还需要验证 url 想象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
}
?>
于 2013-06-21T17:03:12.873 回答
0

您尚未显示完整的相关代码。因此,不确定为什么它对您不起作用,但对于 url 验证,您可以查看以下线程链接的详细讨论:

URL 的 PHP 验证/正则表达式

于 2013-06-21T17:13:20.630 回答
0

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

    $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;
    }
于 2016-08-29T14:34:18.860 回答