验证URL的最佳实践

时间:2013-01-15 05:46:38

标签: php

我有一个表单可以从用户那里获取一些网址。例如:网址,Facebook地址,Twitter地址,Google+地址等...我的问题是我在提交表单时如何验证这些网址。我尝试使用FILTER_VALIDATE_URL或简单地使用正则表达式来验证PHP中的URL。

在这里,我想知道从用户那里获取这些网址的最佳方法是什么。让他们进入协议总是好的吗?有时他们可能不知道它是http,https,ftp,ftps ..等等。我认为这对某些用户来说很难。

我尝试使用FILTER_VALIDATE_URL这样的东西,但它总是使用协议,有时候我很困惑它的工作原理..

// validate url
$url = 'http://www.example.com';

if (filter_var( $url, FILTER_VALIDATE_URL)){
    echo "<br>valid";
} else {
    echo "<br>invalid";
}

输出:有效

// validate url
$url = 'hp://www.example.com';

if (filter_var( $url, FILTER_VALIDATE_URL)){
    echo "<br>valid";
} else {
    echo "<br>invalid";
}

输出:有效

// validate url
$url = 'http://example.com';

if (filter_var( $url, FILTER_VALIDATE_URL)){
    echo "<br>valid";
} else {
    echo "<br>invalid";
}

输出:有效

// validate url
$url = 'http://example.com?id=32&name=kamalani';

if (filter_var( $url, FILTER_VALIDATE_URL)){
    echo "<br>valid";
} else {
    echo "<br>invalid";
}

OUTPUT : valid

您能否告诉我从用户那里获取网址的最佳方式是什么?这些是如何验证的?

任何评论都非常赞赏..

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要使用正则表达式来检查有效网址。

请试试这个:

  $pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
  $URL= 'http://example.com?id=32&name=kamalani';

  if(preg_match($pattern, $URL) ){
    echo "<br>valid";
  } else{
  echo "<br>invalid";
  }

<强>输出

 valid