我正在获取网址test.php?value=%22hello%22
,当我打印出显示\"hello\"
的值时,$_REQUEST['value'][0]
为\
。为什么?我该如何正确解决这个问题?
答案 0 :(得分:4)
最可能的原因是您已启用magic quotes。你应该:
stripslashes
。答案 1 :(得分:1)
如果您不能保证环境允许重新配置,您可以使用此可重用代码递归挖掘$ _GET,$ _POST数组并使用stripslashes清理它们:
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 );