Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 过滤器\验证\ URL的过滤器\标志\方案\必需和过滤器\标志\主机\必需标志的用途是什么?_Php_Validation_Url - Fatal编程技术网

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。