rin*_*ogo 39 php wordpress escaping
这是一个简单的问题,有一个奇怪的难以回答的答案.
get_magic_quotes_gpc()报告0.我重复一遍,魔术报价已关闭.魔术引号似乎已被禁用php.ini(不是在运行时).
然而,当在PHP中访问时,包括单引号(')的所有POST数据都被转义.可能是什么导致了这个?
谢谢.
编辑:对于好奇,这是我们的phpinfo的屏幕截图:http: //img843.imageshack.us/img843/6959/screenshot20120120at552.png
编辑:在准备测试用例时,我发现了问题的一般原因.当我们的应用程序与WP Multisite安装集成时,我们正在引导Wordpress.当我禁用Wordpress引导时,自动转义被禁用.有谁知道Wordpress的自动转义代码可能位于何处?
rin*_*ogo 39
我想我找到了.问题(错误):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);
Run Code Online (Sandbox Code Playgroud)
注意:正如@Alexandar O'Mara所建议的那样,您可能需要重新考虑覆盖这样的超级全局.例如,如果它适合您的情况,您可能只是使用其他方式"剥离本地"$post = array_map('stripslashes_deep', $_POST);
另见@ quickshiftin的优秀答案.
qui*_*tin 15
通过更深入的解释扩展@ rinogo的答案,并提供另一种解决方法.
在wp-settings.php中有一个无条件的调用wp_magic_quotes
// Add magic quotes and set up $_REQUEST ( $_GET + $_POST )
wp_magic_quotes();
Run Code Online (Sandbox Code Playgroud)
Wordpress无论如何都会逃脱报价
function wp_magic_quotes() {
// If already slashed, strip.
// Escape with wpdb.
// Force REQUEST to be GET + POST.
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,这个调用是在加载插件之后,在加载主题之前进行的.Sooo,在你的插件的顶部
// A hack to cope with un-configurable call to wp_magic_quotes
// E.G. Make the original $_POST available through a global $_REAL_POST
$_REAL_GET = $_GET;
$_REAL_POST = $_POST;
$_REAL_COOKIE = $_COOKIE;
$_REAL_REQUEST = $_REQUEST;
Run Code Online (Sandbox Code Playgroud)
然后你可以自由地使用$_REAL_POSTet代替$_POST(记住它是一个全局而不是超全局)你需要的地方.还要记住,当你的插件在主题之前加载时,如果主题调用其中一个使用的插件函数$_POST,它应该读取$_REAL_POST以获取未转义的值.