为什么 $_POST 变量在 PHP 中被转义?

2022-08-30 11:57:13

当我的 PHP 脚本从 AJAX POST 请求接收数据时,变量将被转义。真正奇怪的是,这只发生在我的生产服务器上(在Linux上运行PHP 5.2.12),而不是在我的本地服务器(在Windows上运行PHP 5.3.1)。$_POST

下面是 AJAX 代码:

var pageRequest = false;
if(window.XMLHttpRequest)     pageRequest = new XMLHttpRequest();
else if(window.ActiveXObject) pageRequest = new ActiveXObject("Microsoft.XMLHTTP");

pageRequest.onreadystatechange = function() { }

var q_str = 'data=' + " ' ";

pageRequest.open('POST','unnamed_page.php',true);

pageRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
pageRequest.setRequestHeader("Content-length", q_str.length);
pageRequest.setRequestHeader("Connection", "close");

pageRequest.send(q_str);

发生这种情况有什么原因吗?我应该如何解决这个问题,以便它可以在两台服务器上工作?

编辑:我有以下magic_quotes设置:

                     Local   Master

magic_quotes_gpc     On      On
magic_quotes_runtime Off     Off
magic_quotes_sybase  Off     Off

答案 1

您可能在Linux服务器上启用了魔术引号:magic_quotes

当magic_quotes处于打开状态时,所有 ' (单引号)、“ (双引号)、\(反斜杠) 和 NUL 都自动使用反斜杠进行转义。

禁用它们是一件好事,因为它们无论如何都会从PHP 6开始删除。您还应该能够在脚本中禁用它们:set-magic-quotes-runtime您无法停用magic_quotes负责在运行时转义 POST 数据的部分。如果可以,请在php.ini中禁用它。如果您无法做到这一点,请检查是否启用了magic_quotes,并对从POST获取的任何内容执行 stripslashes():

if (get_magic_quotes_gpc())  
 $my_post_var = stripslashes($_POST["my_post_var"]);

答案 2

我不认为这适用于您的情况,但我只是遇到了类似的问题。我正在加载WordPress安装以及一个网站,所以我可以在所有页面上显示最近的帖子。事实证明,WordPress可以逃脱所有_POST美元的vars,无论magic_quotes设置什么。

我提到它,因为弄清楚它令人沮丧,谷歌搜索答案把我带到了这里。

以下是我在我的情况下修复它的方法:

$temp_POST = $_POST;
require '../www/wp_dir/wp-load.php'; // Loading WordPress
$_POST = $temp_POST;

推荐