有没有简单,安全,快捷的方法来检查网址是否在PHP中有效?
答案 0 :(得分:55)
是的,有!使用filter_var
:
if (filter_var($url, FILTER_VALIDATE_URL) !== false) ...
FILTER_VALIDATE_URL
根据RFC 2396验证网址。
答案 1 :(得分:14)
如果我们查看RFC 3986,我们就可以找到网址的定义。
如果我们看一下附录B,就会有一个使用正则表达式来解析URL的指南:
附录B.使用正则表达式解析URI引用
因为“第一场比赛胜利”算法与“贪婪”相同 POSIX正则表达式使用的消歧方法,是
自然而普通的使用正则表达式来解析
URI引用的潜在五个组件。以下行是用于分解a的正则表达式 格式良好的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
反方向,我们可以重新创建一个URI引用 通过使用第5.3节的算法从其组件中获取。
您可以使用此正则表达式手动解析URL或使用PHP 4和5中可用的内置parse_url function
答案 2 :(得分:0)
这取决于你对有效的定义。语义有效,域名解析等。
快速方法是使用preg_match来测试针对正常表达式的url,以验证它的格式是否正确。这个帖子似乎有一些很好的例子PHP validation/regex for URL