这里提供的最佳答案是将其复制以供个人使用,例如:
$post = array_map('stripslashes_deep', $_POST);
然而,这里存在一个理论问题:由于您正在使用副本,因此无法将任何更改持久化到超全局变量(好吧,我不是说这是一种好的实践,好吗?)。
解决方案:访问器方法
为了以明确的方式解决这个混乱且没有任何副作用,我创建了“访问器方法”,它们透明地应用 stripslashes_deep()
或 addslashes_deep()*
来获取/设置以下超全局数组的请求:
* 我不得不从 WordPress 的 stripslashes_deep()
中组合出 addslashes_deep()
。
$_GET
$_POST
$_COOKIE
$_SERVER
$_REQUEST
您可以像下面这样使用它们:
echo _get('username');
_cookie('name', 'value');
这是代码(我称之为
gpcsr.php
):
<?php
function addslashes_deep( $value ) {
if ( is_array($value) ) {
$value = array_map('addslashes_deep', $value);
} elseif ( is_object($value) ) {
$vars = get_object_vars( $value );
foreach ($vars as $key=>$data) {
$value->{$key} = addslashes_deep( $data );
}
} elseif ( is_string( $value ) ) {
$value = addslashes($value);
}
return $value;
}
function _generic_slashes_wrap(&$arr, $key, $value = null) {
if (func_num_args() === 2) return stripslashes_deep($arr[$key]);
else $arr[$key] = addslashes_deep($value);
}
function _get ($key, $value = null) { if (func_num_args() === 1) return _generic_slashes_wrap($_GET, $key); else _generic_slashes_wrap($_GET, $key, $value); }
function _post ($key, $value = null) { if (func_num_args() === 1) return _generic_slashes_wrap($_POST, $key); else _generic_slashes_wrap($_POST, $key, $value); }
function _cookie ($key, $value = null) { if (func_num_args() === 1) return _generic_slashes_wrap($_COOKIE, $key); else _generic_slashes_wrap($_COOKIE, $key, $value); }
function _server ($key, $value = null) { if (func_num_args() === 1) return _generic_slashes_wrap($_SERVER, $key); else _generic_slashes_wrap($_SERVER, $key, $value); }
function _request ($key, $value = null) { if (func_num_args() === 1) return _generic_slashes_wrap($_REQUEST, $key); else _generic_slashes_wrap($_REQUEST, $key, $value); }
?>