我试图编写一个PHP函数来验证一个URL,这个URL基于用户输入可能已经或可能没有进行URL编码。
我从this answer知道空格应该按此编码:
您应该在
%20
和?
之前+
。
我的功能中的核心故障是使用:
!filter_var($url, FILTER_VALIDATE_URL) === false
虽然在路径或查询字符串中使用+
将返回true,但在路径中处理它时没有问题。我可以轻松地从查询字符串中拆分路径,如果在路径中找到+
,则返回false(要求用户决定%20
或%2B
)。
但我的问题是如果我在查询字符串中找到+
该怎么办?我如何知道这是否正确使用了编码空间,或者是否需要将其编码为%2B
?