2

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

但我需要将其验证为有效的 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

任何人都可以向我提供有关如何实现它的任何想法吗?

我有 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之类的 url ,而我需要验证上面的整个 url。

任何帮助将不胜感激。

4

3 回答 3

3

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

看看 php 的filter_var().

URL 验证示例: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";
}
于 2013-03-24T05:36:05.713 回答
2

为什么要在可以做的时候重新发明轮子filter_var()?然后使用过滤器用于 PHP 5 >= 5.2.0 此外,您可能希望添加所需的域名,我相信您将需要它,您可以查看其他标志以查看是否需要它们。FILTER_VALIDATE_URL filter_varFILTER_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。

于 2013-03-24T05:37:49.857 回答