3

我需要一个带有查询字符串(用 & 分隔的参数)的 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]|%[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...ETC

但这不会验证带有参数(查询字符串)的 URL。例如。

http://google.com/index.html?prod=gmail&act=inbox

我需要一个接受这两种类型的 URL 输入的函数。请帮忙。提前致谢。

4

2 回答 2

2

一个简单的filter_var

if(filter_var($yoururl, FILTER_VALIDATE_URL))
{
  echo 'Ok';
}

可能会成功,尽管 url 没有在架构之前存在问题:http: //codepad.org/1HAdufMG

http://您可以通过在没有它的 url 前面放置一个来解决这个问题。
正如@DaveRandom 所建议的,您可以执行以下操作:

$parsed = parse_url($url); 
if (!isset($parsed['scheme'])) $url = "http://$url";

在输入 filter_var() 函数之前。

总的来说,它仍然是一个比一些额外复杂的正则表达式更简单的解决方案,虽然..

它还具有以下可用标志:

FILTER_FLAG_PATH_REQUIRED FILTER_VALIDATE_URL 要求 URL 包含路径部分。FILTER_FLAG_QUERY_REQUIRED FILTER_VALIDATE_URL 要求 URL 包含查询字符串。

于 2011-12-14T13:21:15.653 回答
0

http://php.net/manual/en/function.parse-url.php

有些人可能认为这不是 100% 防弹的,
但您可以尝试一下

于 2011-12-14T13:37:25.120 回答