在 PHP 中验证 URL

2022-08-30 13:50:40

可能的重复:
PHP 验证/URL 的正则表达式

有没有简单,安全和快速的方法来检查URL在PHP中是否有效?


答案 1

是的,有!使用filter_var

if (filter_var($url, FILTER_VALIDATE_URL) !== false) ...

FILTER_VALIDATE_URL根据 RFC 2396 验证 URL。


答案 2

好吧,如果我们看一下RFC 3986,我们可以找到URL的定义。

如果我们看一下附录B,有一个使用正则表达式解析URL的指南:

附录 B. 使用正则表达式分析 URI 引用

由于“首次匹配获胜”算法与 POSIX 正则表达式使用的“贪婪”
消歧义方法相同,因此使用正则表达式来解析 URI 引用
的潜在五个组件是
自然而常见的。

以下行是用于将格式
正确的 URI 引用分解为其组件的正则表达式。

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9

上面第二行中的数字只是为了提高可读性;它们指示每个子表达式的参考点(即,每个成对的括号)。我们将与子表达式匹配的值称为 $。例如,将上述表达式与

  http://www.ics.uci.edu/pub/ietf/uri/#Related

导致以下子表达式匹配:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related

其中,指示组件不存在,如上例中查询组件的情况。因此,我们可以将五个分量的值确定为

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9

相反,我们可以使用第 5.3 节的算法从其组件重新创建 URI 引用。

您可以使用此正则表达式手动解析URL,或使用在PHP 4和5中可用的内置parse_url函数


推荐