php中的魔术引号Gpc的解决方法

时间:2011-02-02 06:19:59

标签: php regex

服务器上有魔术引号并且由于某种原因无法关闭..... now stripslashes会删除魔术引号添加的所有斜杠,但是如果用户在输入字段中添加了斜杠(我们允许斜杠) ),striplashes也会删除它。

我正在尝试一个正则表达式,只有当它前面有{',“,}时才会删除斜杠....

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我在配置文件中使用此代码:

// remove slashes, if they are being automatically added
if ( get_magic_quotes_gpc () ) {
    $_GET    = array_map('stripslashes', $_GET);
    $_POST   = array_map('stripslashes', $_POST);
    $_COOKIE = array_map('stripslashes', $_COOKIE);
    $_REQUEST = array_map('stripslashes', $_REQUEST); // see ThiefMaster's comment
}

这是我唯一需要担心斜线的地方。在所有其他地方,我可以放心地假设没有“魔术引号”。

虽然stripslashes()不适用于数组,但是如果你希望在$ _GET,$ _POST或$ _COOKIE中使用数组作为值(在公共网页/系统中,你应该期望有数组),此函数可用作回调:

function stripslashes_recursive($value) {
    if ( is_array($value) ) {
        return array_map(__FUNCTION__, $value);
    }
    return stripslashes($value);
}

PHP 5.3用户可能会使用闭包作为回调:

$stripslashes = function($value) use(&$stripslashes) {
    if ( is_array($value) ) {
        return array_map($stripslashes, $value);
    }
    return stripslashes($value);
};

这不会污染具有附加功能的全局范围(stripslashes_recursive())。