3 回答
TA贡献1799条经验 获得超9个赞
%2F出于安全原因,Apache拒绝在路径部分中使用的所有URL :由于环境变量会自动进行URL解码(这是愚蠢的做法,但长期以来一直存在)%2F,/因此脚本通常无法(即,无需重写)来区别两者之间的区别。PATH_INFOCGI规范的一部分,因此无法执行任何操作)。
您可以使用AllowEncodedSlashes指令关闭此功能,但请注意,其他Web服务器仍将禁止使用此功能(没有选择将其关闭),并且其他字符也可能是忌讳的(例如%5C),%00尤其始终是被Apache和IIS阻止。因此,如果您的应用程序依赖于%2F在路径部分中包含字符或其他字符,则将限制您的兼容性/部署选项。
我在准备搜索URL时正在使用urlencode()
您应该使用rawurlencode(),而不是urlencode()转义路径部分。urlencode()被错误命名,它实际上是用于application/x-www-form-urlencoded查询字符串或POST请求正文中的数据,而不用于URL的其他部分。
区别在于,+这并不意味着路径部分中存在空间。rawurlencode()会正确地产生%20,这将对表单编码的数据和URL的其他部分都起作用。
TA贡献1744条经验 获得超4个赞
我在url get param中存在斜线相同的问题,在我的情况下,以下php代码有效:
$value = "hello/world"
$value = str_replace('/', '/', $value;?>
$value = urlencode($value);?>
# $value is now hello%26%2347%3Bworld
我先用html实体替换斜杠,然后再进行url编码。
添加回答
举报