使用PHP进行查询字符串验证的URL
我需要一个带有查询字符串的URL的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
$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";