FILTER_VALIDATE_URL太严格了吗?

fed*_*o-t 18 php url

在PHP中,filter_var('www.example.com', FILTER_VALIDATE_URL)返回false.它是否正确?是不是www.example.com有效的URL,或者需要在URL中明确说明协议(http://,ftp://等)是否正式正确?

Pau*_*xon 23

它不是有效的URL.使用前缀http://从来都不是一个非常用户友好的东西,所以现代浏览器假设您只是输入一个域名的意思.正确地说,软件库有点挑剔!

您可以采取的一种方法是将字符串传递给parse_url,然后添加任何缺少的元素,例如

if ( $parts = parse_url($url) ) {
   if ( !isset($parts["scheme"]) )
   {
       $url = "http://$url";
   }
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,当您使用FILTER_VALIDATE_URL时,它实际上在内部使用parse_url来确定方案是什么(查看源代码).感谢salathe在下面的评论中发现这一点.

  • 星期三Trivia:`FILTER_VALIDATE_URL`使用`parse_url()`来检查是否有方案. (3认同)