PHP自动对GET参数进行URL解码

4

我有一个网站,刚从一个服务器迁移到另一个服务器。在旧服务器上,请求的GET参数自动进行了'URL解码'。现在,在我的新服务器上,当我尝试检索GET参数时,我得到的是编码值而不是解码值。

因为除了服务器之外,我的项目没有任何变化,这让我认为这是PHP设置(可能在php.ini中)引起的。

如何让PHP自动解码我的GET参数值?


4
警告:超全局变量 $_GET 和 $_REQUEST 已经解码。在 $_GET 或 $_REQUEST 中的元素上使用 urldecode() 可能会产生意想不到的危险结果。请注意。 - Hanky Panky
@HankyPanky,楼主说他们是未解码的 - fusion3k
2
根据手册上的注释,问题出在其他地方。因为没有任何版本的PHP不会自动解码正确编码的GET请求。然而,这里有很多关于JavaScript编码值无法正确传递的评论。http://php.net/manual/en/function.urldecode.php - Hanky Panky
这听起来非常奇怪...我不知道有任何php.ini设置可以更改这个。此外,你似乎是唯一遇到这个问题的人。请三次检查文件是否完全相同。在你的新服务器上是否有一些RewriteRule?也许这是一个与服务器相关的问题 - fusion3k
谢谢您的评论。我通过JavaScript AJAX请求将参数发送到我的服务器(使用encodeUriComponent),所以问题可能出在那里。我仍然觉得奇怪的是它在旧服务器上正常工作,但在新服务器上却不行,但我会问一下我的新托管提供商,看看他们是否有任何想法。 - Terrabythia
好久不见,这里有人有解决方案吗?我遇到了非常类似的问题:1. 使用javascript encodeURIComponent构建一个字符串作为iframe的src参数。 2. 使用$_GET检索这些参数,但值尚未被解码(这在我们的暂存服务器上发生,开发环境没有此问题)。有人有什么建议吗?非常感谢! - Jon TJ
1个回答

0

我刚遇到了同样的问题,结果发现是新服务器上的Apache重写规则与旧服务器上的不同。该规则重新编码了已经编码过的URL。我很幸运地注意到在Chrome的开发者工具网络选项卡中URL迅速变化,并意识到重定向必须是原因。

在我的情况下,解决方案是完全删除包含该规则的.htaccess文件,但这种更改也可能是由于Apache服务器配置文件中的规则引起的。

如果存在重写规则但需要它,则可以通过将NE(无转义)添加到重写标志来禁用URL编码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接