Php 过滤器\验证\ URL的过滤器\标志\方案\必需和过滤器\标志\主机\必需标志的用途是什么?
我们可以与和一起使用:Php 过滤器\验证\ URL的过滤器\标志\方案\必需和过滤器\标志\主机\必需标志的用途是什么?,php,validation,url,Php,Validation,Url,我们可以与和一起使用: FILTER\u VALIDATE\u URL根据内部使用和要求方案(协议)和主机部件将值验证为URL 如果我还需要检查路径和查询部分,我可以使用如下过滤器变量: filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_QUERY_REQUIRED); filter_var('test1/2.html', FILTER_VALIDATE_URL, FILTER_FLAG_
FILTER\u VALIDATE\u URL
根据内部使用和要求方案(协议)和主机部件将值验证为URL
如果我还需要检查路径和查询部分,我可以使用如下过滤器变量:
filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_QUERY_REQUIRED);
filter_var('test1/2.html', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED);
但是FILTER\u FLAG\u SCHEME\u REQUIRED
和FILTER\u FLAG\u HOST\u REQUIRED
标志有什么用呢?似乎不管我们是否指定这些标志,scheme和host部件都会被检查
例如,筛选有效的相对URL,如下所示:
filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_QUERY_REQUIRED);
filter_var('test1/2.html', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED);
返回false。PHP7.3.0
FILTER\u FLAG\u SCHEME\u REQUIRED
和FILTER\u FLAG\u HOST\u REQUIRED
现在在PHP7.3.0中被弃用,因为它们在FILTER\u VALIDATE\u URL
中使用过
你说得对。这两个标志在默认情况下处于打开状态,尽管官方文档中有说明(见下文),但无法禁用它们。正如你在问题中所写,它们是无用的。我想这是一只虫子。与此相关的还有一个问题 : 请注意,有效的URL可能未指定HTTP协议HTTP://因此可能需要进一步验证以确定URL是否使用预期的协议,例如ssh://或mailto: :
如您所见,如果是相对的,则有效的URL可能没有方案部分或主机名部分。可能,
FILTER\u FLAG\u SCHEME\u REQUIRED
和FILTER\u FLAG\u HOST\u REQUIRED
应有助于通过设计检查其存在性。但是这是不可能的。自5.2.1以来,所需的标志FILTER\u FLAG\u SCHEME\u
和FILTER\u FLAG\u HOST\u REQUIRED
都没有任何效果,因为它们始终处于启用状态,无法禁用它们,而且它们实际上在PHP源代码中的任何地方都没有使用
关于常数的使用,文档刚刚被澄清,但是为了保持向后兼容性,在下一个主要PHP版本[例如:PHP8]之前,它们不太可能被删除
有一小部分硬编码方案不需要主机名部分,[mailto:
,news:
,和file:
],但如果您想对没有主机或方案部分的其他url进行验证,则需要编写一些调用parse_url()
并在返回时进行操作的代码
您可以在此处查看当前URL验证源:您可以提供示例,说明如何使用
过滤器\u验证\u URL
检查相对URL吗<代码>过滤器变量('test1/2.html',过滤器验证\ URL)代码>返回false,但据我所知,它是有效的相对URL…你是对的。默认情况下,这两个标志处于打开状态,无法禁用它们。正如你在问题中所写,它们是无用的。我想这是一只虫子。有一个相关的错误报告:是的,我想这是一个错误,只是好奇我是否错过了什么。更新你的答案,我准备接受。完成。我希望这对将来可能面临这个问题的人来说足够清楚,我相信这是PHP5.2.1中隐含的。从-5.2.1开始,FILTER_VALIDATE_URL现在隐式使用FILTER_FLAG_SCHEME_REQUIRED和FILTER_FLAG_HOST_REQUIRED。