小编典典

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

ajax

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

这是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

阅读 255

收藏
2020-07-26

共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"]);
2020-07-26