使用PHP进行查询字符串验证的URL

使用PHP进行查询字符串验证的URL,php,url,query-string,url-validation,Php,Url,Query String,Url Validation,我需要一个带有查询字符串的URL的PHP验证函数(参数用&)分隔)。目前,我有以下验证URL的功能 $pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w

我需要一个带有查询字符串的URL的PHP验证函数(参数用&)分隔)。目前,我有以下验证URL的功能

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';

echo preg_match($pattern, $url);
此函数正确验证输入,如

google.com
www.google.com
http://google.com
http://www.google.com
…等等

但当URL带有参数(查询字符串)时,这不会验证URL。例如

我需要一个函数,接受这两种类型的URL输入。请帮忙。提前感谢。

一个简单的

虽然url不在架构之前存在问题,但可能会达到此目的:

您可以通过在URL前面放置一个
http://
来扭转这个问题。
正如@DaveRandom所建议的,您可以执行以下操作:

$parsed = parse_url($url); 
if (!isset($parsed['scheme'])) $url = "http://$url";
在输入filter_var()函数之前

总的来说,它仍然是一个比一些额外复杂的正则表达式更简单的解决方案

它还具有以下可用标志:

过滤器\标志\路径\所需过滤器\验证\ URL要求URL 包含路径部分。筛选器\u标志\u查询\u所需筛选器\u验证\u URL 要求URL包含查询字符串

有些人可能认为这不是100%防弹的,

但是你可以试一下作为开始

虽然
这个函数并不是用来验证给定的URL,它只是把它分成上面列出的几个部分。
@DamienPirsy确实,我正打算回答这个问题,直到我开始玩它,并发现我实际上无法想出任何会使它返回错误的东西。甚至通过
“\x00”
”this@is.not.a.url“
不会破坏它……FTR,我认为确保方案存在的最明智的方法是
$parsed=parse\u url($str);如果(!isset($parsed['scheme'])$url=“http://$url”我使用Parse\uURL检查URI中是否存在查询。几乎成功了……)
if(filter_var($yoururl, FILTER_VALIDATE_URL))
{
  echo 'Ok';
}
$parsed = parse_url($url); 
if (!isset($parsed['scheme'])) $url = "http://$url";