我需要一个带有查询字符串的URL的PHP验证函数(与&分隔的参数)。目前我有以下功能来验证网址
$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。例如。
http://google.com/index.html?prod=gmail&act=inbox
我需要一个接受两种类型的URL输入的函数。请帮忙。提前谢谢。
答案 0 :(得分:2)
一个简单的filter_var
if(filter_var($yoururl, FILTER_VALIDATE_URL))
{
echo 'Ok';
}
可能会起作用,尽管url不在架构之前存在问题: http://codepad.org/1HAdufMG
您可以通过在没有它的网址前放置http://
来解决问题
正如@DaveRandom所建议的那样,你可以这样做:
$parsed = parse_url($url);
if (!isset($parsed['scheme'])) $url = "http://$url";
在输入filter_var()函数之前。
总的来说,它仍然比一些复杂的正则表达式更简单,但是..
它还有这些标志:
FILTER_FLAG_PATH_REQUIRED FILTER_VALIDATE_URL需要网址 包含路径部分。 FILTER_FLAG_QUERY_REQUIRED FILTER_VALIDATE_URL 需要URL包含查询字符串。
答案 1 :(得分:0)
http://php.net/manual/en/function.parse-url.php
有些人可能认为这不是100%防弹,
但你可以先尝试一下