0

我正在获取 url test.php?value=%22hello%22,当我打印出它显示的值时,\"hello\"$_REQUEST['value'][0]\. 为什么?我该如何(正确地)解决这个问题?

4

2 回答 2

4

最可能的原因是您打开了魔术引号。你应该:

  • 升级到 PHP 5.4
  • 在您的 PHP 配置文件中禁用它们
  • 在您的 Apache 配置中禁用它们(相同的链接)
  • (最后的手段)测试它们是否已打开,然后运行stripslashes输入。
于 2013-04-22T20:03:43.677 回答
1

如果你不能保证环境允许重新配置,你可以使用这个可重用的代码递归地挖掘 $_GET、$_POST 数组并用带斜杠清理它们:

class de_slasher {

    function recursive_stripslashes($a) {
        $b = array();
        foreach( $a as $k => $v ) {
            $k = stripslashes($k);
            if( is_array($v) ) {
                $b[$k] = $this->recursive_stripslashes($v);
            } else {
                $b[$k] = stripslashes($v);
            }
        }
        return($b);
    }

    function check_and_fix_magic_quotes( &$array ) {
        if( get_magic_quotes_gpc() ) {
            $array = $this->recursive_stripslashes( $array );
        }
    }

    function __construct( $auto = false ) {
        if( $auto === true ) {
            $this->check_and_fix_magic_quotes( $_POST );
            $this->check_and_fix_magic_quotes( $_GET );
        }
    }
}

要使用,只需包含该类,并调用$slasher = new de_slasher(true);以自动清理 $_GET 和 $_POST。仅当魔术引号设置打开时才会发生这种情况。如果您在没有“true”参数的情况下实例化类,那么您可以选择性地深度过滤任何数组:

$my_array = array( "name" => "Herbert\'s Apple" );
$slasher = new de_slasher();
$slasher->check_and_fix_magic_quotes( $my_array );
于 2013-04-22T20:27:30.890 回答