验证URL PHP

Dha*_*ana -4 php url http

我正在研究一个项目,在这个项目中,我需要检查用户输入是否是有效的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://") {
Run Code Online (Sandbox Code Playgroud)

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

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";
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*eer 14

您可以自己简化并使用filter_var中的URL过滤,而不是正则表达式:

if (filter_var($url, FILTER_VALIDATE_URL)) { ...
Run Code Online (Sandbox Code Playgroud)

  • 如果`filter_var`产生一个肯定的结果,你可以用`parse_url`检查它.这允许您提取URL的一部分,如方案(http,https,hxxpabc). (2认同)

Law*_*one 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
}
?>
Run Code Online (Sandbox Code Playgroud)