PHP GET 参数自动 urldecode

Posted

技术标签:

【中文标题】PHP GET 参数自动 urldecode【英文标题】:PHP GET parameters automatic urldecode 【发布时间】:2016-06-03 16:50:51 【问题描述】:

我有一个网站刚刚从一台服务器移动到另一台服务器。在旧服务器上,请求的 get-parameters 被自动“url解码”。现在,在我的新服务器上,当我尝试检索 GET 参数时,我得到的不是 url 解码值,而是编码值。

因为除了服务器之外,我的项目中没有任何变化,这让我觉得这是一个 php 设置(可能在 php.ini 中?)。

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

【问题讨论】:

Warning The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results. @HankyPanky OP 说他们未解码 然后根据手册上的说明,问题出在其他地方。因为没有不会自动解码正确编码的 GET 的 PHP 版本。然而,这里有很多关于 javascript 编码值没有正确通过的 cmets。 php.net/manual/en/function.urldecode.php 这听起来很奇怪...我不知道任何 php.ini 设置来改变它。此外,您似乎是唯一遇到此问题的人。 三重检查文件是否完全相同。你的新服务器上有一些 RewriteRule 吗?也许是server related issue。 感谢您的 cmets。我通过 JavaScript AJAX 请求将参数发送到我的服务器(使用 encodeUriComponent),所以问题可能出在某个地方。我仍然觉得奇怪的是它确实在旧服务器上而不是在新服务器上正常工作,但我会询问我的新托管服务提供商是否知道它可能是什么。 【参考方案1】:

我刚刚遇到了同样的问题,结果证明是由于新服务器上的 Apache 重写规则在旧服务器上不存在。该规则重新编码了一个已经编码的 URL。我很幸运地注意到 Chrome 的开发者工具网络选项卡中的 URL 快速变化,并意识到一定是重定向造成的。

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

在存在但需要重写规则的情况下,可以通过将NE (no escape) 添加到重写标志来禁用 URL 编码。

【讨论】:

以上是关于PHP GET 参数自动 urldecode的主要内容,如果未能解决你的问题,请参考以下文章

php中__set和__get要怎么理解?

php 用get方式传递中文参数,无法用strpos判断中文字处于第几个

PHP 对象 魔术方法 __get __set __isset __unset

php curl如何直接转发当前php接收的headers?get请求如何直接转发get参数?post请求如何直接转发post参数?

NetBeans 自动完成和 PHP;强制 __get() 类型

php如何通过get方法发送http请求,并且得到返回的参数