PHP –验证URL

在PHP中验证URL的最简单,最一致的方法是使用 filter_var()

这是一个例子:

$url = "http://whileifblog.com";
if (filter_var($url, FILTER_VALIDATE_URL)) {
      echo "URL is valid";
} else {
      echo "URL is invalid";
}

这种方法的唯一问题是它有一些警告。PHP filter_var函数仅自PHP 5.2起可用。如果您运行的PHP版本早于5.2,那么您就不走运了。

PHP 5.2.13和PHP 5.3.2中还存在一个错误,该错误不允许使用破折号的URL进行验证。如果不确定您的PHP版本,可以在安装了命令行PHP的情况下从命令行运行php -v,或者创建包含以下内容的PHP文件并使用网络浏览器导航至该文件:

phpinfo();

由于的限制filter_var(),您可能不得不退回到使用正则表达式。这是一个允许在URL中使用破折号的正则表达式的示例:

$url = "http://whileifblog.com";
if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) {
    echo "URL is valid";
} else {
    echo "URL is invalid";
}

关于在进行URL验证时使用正则表达式是否是一个好主意,存在很多争议。如果您不确定并正在寻找指南,那么这可能会有所帮助:

如果您使用的是PHP的版本比PHP 5.2以上:
-使用正则表达式的方法
如果你正在使用PHP 5.2.13或PHP 5.3.2和需要的网址,用破折号来验证:
-使用正则表达式的方法
。如果你不要属于以下类别之一:
–使用filter_var()方法
有些人抱怨说使用PHPfilter_var()函数太宽松了,并允许不应验证的URL。一种解决方案是使用filter_var进行初始验证,然后在原始filter_var验证通过的情况下执行其他验证检查。