问题:
在 PHP 中,$_POST 变量从AJAX POST 请求在生产服务器上被转义,而在本地服务器上保持完整。本地服务器在 Windows 上运行 PHP 5.3.1,而生产服务器在 Linux 上运行 PHP 5.2.12。
原因:
两台服务器之间的差异为可能是由于在生产服务器上使用了魔术引号。
魔术引号:
魔术引号是 PHP 中已弃用的功能,它会自动转义 $_GET 中的某些字符、 $_POST 和 $_COOKIE 变量以防止 SQL 注入和其他攻击。转义字符包括:
解决方案:
要解决该问题并确保两台服务器的行为一致,您可以在生产服务器上禁用魔术引号。在 php.ini 或每个脚本中全局使用 set_magic_quotes_runtime()。
如果无法禁用魔术引号,您可以在获取的任何 POST 数据上使用 stripslashes() 函数手动删除斜杠:
<code class="php">if (get_magic_quotes_gpc()) { $my_post_var = stripslashes($_POST["my_post_var"]); }</code>
通过适当地禁用或处理魔术引号,您可以确保 $_POST 变量不会在生产服务器上转义,从而允许 AJAX POST 请求正确运行。
以上是为什么我的 AJAX POST 变量在生产服务器上转义,但在本地服务器上却没有转义?的详细内容。更多信息请关注PHP中文网其他相关文章!