【问题标题】:Validate URL with PHP [duplicate]使用 PHP 验证 URL [重复]
【发布时间】:2013-09-01 04:11:00
【问题描述】:

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

我已经看到(我刚刚发现)filter_var() 函数,但正如我所读到的,网址存在一些问题。 我可以找到一些正则表达式,但它们似乎不是很详尽。

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

【问题讨论】:

  • filter_var() 的问题只在 PHP 5.2.13 或更早版本中发现 如果您使用的是较新版本的 PHP,那么我建议使用 filter_var()

标签: php url


【解决方案1】:

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

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

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

我的两分钱。

【讨论】:

    【解决方案2】:

    让我们来点高级的:

    <?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
    

    【讨论】:

      【解决方案3】:

      或者尝试不同的方法。

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

      【讨论】:

        猜你喜欢
        • 2011-10-23
        • 2016-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2013-05-02
        • 2011-05-11
        相关资源
        最近更新 更多