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

时间:2011-12-14 13:15:31

标签: php url query-string url-validation

我需要一个带有查询字符串的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输入的函数。请帮忙。提前谢谢。

2 个答案:

答案 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%防弹,
但你可以先尝试一下