一尘不染

禁用“魔术引号”后,PHP / WordPress为什么继续自动转义我的POST数据?

php

这是一个简单的问题,答案很奇怪。

get_magic_quotes_gpc()报告0。我重复一遍,魔术引号已关闭。魔术引号似乎已被禁用php.ini(不是在运行时)。

不过,在PHP中访问时,包括单引号(’)在内的所有POST数据都会被转义。是什么原因造成的?


在准备测试用例时,我发现了问题的一般根源。当我们的应用程序与WordPress多站点安装集成时,我们正在引导WordPress。当我禁用WordPress引导程序时,会禁用自动转义。WordPress的自动转义代码可能位于何处?


阅读 228

收藏
2020-05-26

共1个答案

一尘不染

我想我找到了。问题(错误):http :
//core.trac.wordpress.org/ticket/18322

解决方案:http :
//codex.wordpress.org/Function_Reference/stripslashes_deep

    $_GET       = array_map('stripslashes_deep', $_GET);
    $_POST      = array_map('stripslashes_deep', $_POST);
    $_COOKIE    = array_map('stripslashes_deep', $_COOKIE);
    $_SERVER    = array_map('stripslashes_deep', $_SERVER);
    $_REQUEST   = array_map('stripslashes_deep', $_REQUEST);

注意:如@Alexandar O’Mara所建议,您可能要重新考虑像这样覆盖超全局变量。例如,如果适合您的情况,则可以使用诸如$post = array_map('stripslashes_deep', $_POST);

另请参阅@quickshiftin的出色答案。

2020-05-26