Php 是否可以消除+;从空间和URL中的%2B';什么是查询字符串?

Php 是否可以消除+;从空间和URL中的%2B';什么是查询字符串?,php,validation,url,urlencode,Php,Validation,Url,Urlencode,我正在尝试编写一个PHP函数来验证URL,该URL基于用户输入,可能是URL编码的,也可能不是 我知道空格应该这样编码: 您应该在?之前有%20,之后有+ 我的功能中的核心故障是使用以下功能: !filter_var($url, FILTER_VALIDATE_URL) === false 虽然这将在路径或查询字符串中使用+返回true,但在路径中处理它没有问题。如果在路径中找到+(需要用户决定%20或%2B),我可以很容易地从查询字符串中分割路径并返回false 但我的问题是,如果在查询字符

我正在尝试编写一个PHP函数来验证URL,该URL基于用户输入,可能是URL编码的,也可能不是

我知道空格
应该这样编码:

您应该在
之前有
%20
,之后有
+

我的功能中的核心故障是使用以下功能:

!filter_var($url, FILTER_VALIDATE_URL) === false
虽然这将在路径或查询字符串中使用
+
返回true,但在路径中处理它没有问题。如果在路径中找到
+
(需要用户决定
%20
%2B
),我可以很容易地从查询字符串中分割路径并返回false


但我的问题是,如果在查询字符串中找到
+
,该怎么办?我如何知道这是否正确使用了编码空间,或者是否需要将其编码为
%2B

您不会相信我在这方面浪费了多少时间(编码和取消编码文件名时都带有+号)。对我来说很好,我正在将文件上传到AWS S3。因此,我最后做的是在上传文件名之前从文件名中剥离所有
+
。问题解决了。:)根据您所述的规范,编码之前查询字符串中存在的任何
+
都已是%2B。因此,如果您找到一个
+
,那么它就是一个空格。@threadp:如果每个工具都符合规范。这是faaaar from truth。@threadp是的,我对查询字符串之前发生的事情没有问题,而是在查询字符串之后发生的事情。@SergioTulentsev这就是标准的问题。。。有这么多我们可以选择:)你不会相信我在这件事上浪费了多少时间(编码和取消编码文件名中都有+的)。对我来说很好,我正在将文件上传到AWS S3。因此,我最后做的是在上传文件名之前从文件名中剥离所有
+
。问题解决了。:)根据您所述的规范,编码之前查询字符串中存在的任何
+
都已是%2B。因此,如果您找到一个
+
,那么它就是一个空格。@threadp:如果每个工具都符合规范。这是faaaar from truth。@threadp是的,我对查询字符串之前发生的事情没有问题,而是在查询字符串之后发生的事情。@SergioTulentsev这就是标准的问题。。。我们可以从中选择很多:)