1

我需要检查一个表单字段是否是一个有效的 URL(它可以通过 HTML5 完成,但不是每个浏览器都有它),我找不到一个好的 URL 检查器功能。这很奇怪,因为通过电子邮件检查,有很多已经完成的功能。

我已经看到(我刚刚发现)这个filter_var()功能,但是当我读到时,网址存在一些问题。我可以找到一些正则表达式,但它们似乎不是很详尽。

你知道有什么好的 url checker 功能吗?

4

3 回答 3

1

让我们来一点高级:

<?php 
function validate_url($url) {
  return (bool)preg_match("
      /^                                                      # Start at the beginning of the text
      (?:ftp|https?|feed):\/\/                                # Look for ftp, http, https or feed schemes
      (?:                                                     # Userinfo (optional) which is typically
        (?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*      # a username or a username and password
        (?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@          # combination
      )?
      (?:
        (?:[a-z0-9\-\.]|%[0-9a-f]{2})+                        # A domain name or a IPv4 address
        |(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\])         # or a well formed IPv6 address
      )
      (?::[0-9]+)?                                            # Server port number (optional)
      (?:[\/|\?]
        (?:[\w#!:\.\?\+=&@$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})   # The path and query (optional)
      *)?
    $/xi", $url);
}
?>

主要来自Drupal 中的valid_url函数。

示例使用:

validate_url($url); // this will return TRUE if the URL is correct. Protocol should exist in $url
于 2013-08-28T22:08:58.117 回答
1

这是因为 URL 格式可以如此通用:

Http// is optionnal
www is optionnal
.com, .net, .us, etc so many possible pattern
.html, /, .php, or nothing are possible ends

我建议您构建自己的函数,而不是使用预制函数,这取决于您的大多数用户发送 URL 的方式、结尾等...

我的两分钱。

于 2013-08-28T21:59:24.677 回答
0

或者尝试不同的方法。

为什么不检查file_get_contents($url)?这样,您还将知道 URL 是否有效。我想你可以使用类似的东西, fread(fopen($url,'r'),100);所以它不能被注入一些巨大的文件。检查诸如localhost之类的东西仍然是您可能想要做的事情。

于 2013-08-28T22:39:15.933 回答