我正在写一组PHP脚本,这些脚本将在一些不同的设置中运行,其中一些共享主机上带有(恐怖)魔术引号。如果没有控制PHP或Apache配置的能力,我可以在脚本中执行任何操作来禁用运行时的PHP引号吗?如何在运行时禁用PHP魔术引号?
它会更好,如果代码不承担魔术引号是,所以我可以使用,可能会或可能不会有魔术引号不同的主机相同的脚本。
我正在写一组PHP脚本,这些脚本将在一些不同的设置中运行,其中一些共享主机上带有(恐怖)魔术引号。如果没有控制PHP或Apache配置的能力,我可以在脚本中执行任何操作来禁用运行时的PHP引号吗?如何在运行时禁用PHP魔术引号?
它会更好,如果代码不承担魔术引号是,所以我可以使用,可能会或可能不会有魔术引号不同的主机相同的脚本。
只有magic_quoted_runtime可以在运行时被禁用。但magic_quotes_gpc不能在运行时禁用(PHP_INI_ALL可变更到PHP 4.2.3,从那时起PHP_INI_PERDIR);您只能删除它们:
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
欲了解更多信息,请参阅Disabling Magic Quotes。
它不能在运行时:(做
魔术引号不能在运行时被禁用,但是你可以使用.htaccess文件在目录中禁用它。
php_flag magic_quotes_gpc off
唯一真正好处这已经是你可以把它曾经在目录中,如果你需要这个应用程序,你没写,需要得到它没有魔术引号工作,它适用于整个目录和子目录。真的很好。
我有一个类似于胶的脚本薄熙来的(但当然我喜欢我的更好:):
if(function_exists('get_magic_quotes_runtime') && get_magic_quotes_runtime())
set_magic_quotes_runtime(false);
if(get_magic_quotes_gpc()) {
array_stripslashes($_POST);
array_stripslashes($_GET);
array_stripslashes($_COOKIES);
}
function array_stripslashes(&$array) {
if(is_array($array))
while(list($key) = each($array))
if(is_array($array[$key]))
array_stripslashes($array[$key]);
else
$array[$key] = stripslashes($array[$key]);
}
为PHP 5.3+另一种解决方案:
if (get_magic_quotes_gpc() === 1)
{
$_GET = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_GET, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
$_POST = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_POST, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
$_COOKIE = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_COOKIE, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
$_REQUEST = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_REQUEST, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
}
手柄键,值和多维数组。
这看起来不错,谢谢! – 2009-07-20 14:05:36
我真的认为这个代码也应该`ini_set('magic_quotes_gpc',false);`为了防止另一个也关心条带化输入值的库再次删除它们。 – gnarf 2010-12-16 22:21:22
@gnarf:这将是甜蜜的,但不幸的是它不是这样的,如果你尝试'的ini_set(“magic_quotes_gpc的”,0)`你会因为这是只有在`PHP_INI_PERDIR`可行得到`FALSE`每次。 – 2011-04-21 19:50:48