当我的PHP脚本从AJAX POST请求接收数据时,$_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
您可能已在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"]);