如何验证具有大量查询字符串的网址

时间:2013-03-24 05:30:54

标签: php validation preg-match

我有一个自动网站,我有一个名为SAVE SEARCH的功能,可以保存用户在网站上进行的搜索,以备将来使用。我正在做的是我将整个网址保存在数据库中。

但我需要将其验证为有效的网址。它看起来像这样。

http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE

任何人都可以告诉我如何实现它吗?

我在这里有preg_match。

if (!preg_match('/^https?:(\/\/)?(www\.)?([a-zA-Z0-9_%]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', $fields[$field_name]))

但它只会验证http://www.anywebsite.com等网址,而我需要验证上面的整个网址。

任何帮助都将受到高度赞赏。

3 个答案:

答案 0 :(得分:3)

没有理由说你需要手动编写URL验证代码,这个问题已经解决了。

看一下php的filter_var()

网址验证示例:http://www.w3schools.com/php/filter_validate_url.asp

$url = "http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE";

if (!filter_var($url, FILTER_VALIDATE_URL)) {
  echo "URL is not valid";
}
else {
  echo "URL is valid";
}

答案 1 :(得分:3)

答案 2 :(得分:2)

为什么你可以filter_var()重新发明轮子?然后使用过滤器FILTER_VALIDATE_URL filter_var适用于PHP 5> = 5.2.0您还可以添加FILTER_FLAG_HOST_REQUIRED以获取所需的域名,我相信您需要该域名,您可以查看其他标志以查看是否你需要它们。

示例:

$url = 'http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE';
if(filter_var($url, FILTER_VALIDATE_URL)){
    #do stuff here
}else{
    #invalid
}

工作示例:http://ideone.com/N84VGF

如果你有旧版本的PHP,你可以使用parse_url(),但你必须添加正则表达式/验证,因为它不验证它是否是真实/有效的URL。