我正在获取 url test.php?value=%22hello%22
,当我打印出它显示的值时,\"hello\"
它$_REQUEST['value'][0]
是\
. 为什么?我该如何(正确地)解决这个问题?
问问题
154 次
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 回答