0

我正在编写一个短脚本,当 http:// 与 URL 一起传递时遇到了问题。

问题:如果用户没有在其中提供带有 http:// 的链接,则脚本无法处理它并返回无效的 url 错误,而不是应该发生的事情,因为 preg_match 应该解析 http、https 和没有其中任何一个的链接。

这是负责检查http的代码片段

$url = $_REQUEST['url'];  

  if(!preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $url)) {  
    $html = "<h1 id='upc' style='padding:8px 8px;text-align:center;'>Error: invalid URL</h1>";  
  } else {  
    $url = $_REQUEST['url'];  

修复它并允许解析 http 和 https 以及解析没有 http 或 https 的链接的最佳方法是什么

4

1 回答 1

0

你可以使用filter_var()

if (filter_var($url, FILTER_VALIDATE_URL)) {
    // $url is valid
} else {
    // $url is NOT valid
}

它不检查协议是否有效(因此foo://www.foo.com/bar验证但foo:/\www.foo.com/bar不验证),但这是一个开始。根据文档,parse_url()并不意味着验证 URL。

于 2013-02-04T16:46:44.563 回答