FILTER_VALIDATE_URL是否过于严格?

2022-08-30 22:03:14

在 PHP 中,返回 .这是正确的吗?难道一个有效的URL或协议(http://,ftp:// 等)不需要在URL中明确说明才能正式正确吗?filter_var('www.example.com', FILTER_VALIDATE_URL)falsewww.example.com


答案 1

它不是一个有效的网址。在事物前面加上前缀从来都不是一件非常用户友好的事情,所以现代浏览器假设你的意思是http,如果你只是输入一个域名。软件库理所当然地更加挑剔一些!http://

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

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

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


答案 2

URL必须与RFC 2396中设置的规则相对应,并且根据该规范,协议是必要的。


推荐