需要你在不寻常的情况下提供帮助。我需要修剪所有$ _POST变量。
我有什么方法可以一次性完成,即使用单一功能吗?
我知道修剪($ _ POST)不会做,我必须做一些像
这样的功能function sanatize_post(){
foreach ($_POST as $key => $val)
$_POST[$key] = trim($val);
}
但是,如果您有任何其他建议或意见,请帮助我。
由于
答案 0 :(得分:13)
简单地
$_POST = array_map("trim", $_POST);
但是如果$ _POST成员(即使其中一个)又是一个数组本身,那么使用递归版本:
function array_map_deep( $value, $callback )
{
if ( is_array( $value ) ) {
foreach ( $value as $index => $item ) {
$value[ $index ] = array_map_deep( $item, $callback );
}
} elseif ( is_object( $value ) ) {
$object_vars = get_object_vars( $value );
foreach ( $object_vars as $property_name => $property_value ) {
$value->$property_name = array_map_deep( $property_value, $callback );
}
} else {
$value = call_user_func( $callback, $value );
}
return $value;
}
答案 1 :(得分:9)
将array_walk
与自定义功能
$clean_values = array();
array_walk($_POST, 'sanitize_post');
function sanitize_post($item, $key)
{
$clean_values[$key] = trim($item);
//optional further cleaning ex) htmlentities
}
答案 2 :(得分:8)
array_walk($_POST, 'trim')
(请注意,当输入名称= foo [bar]转换为数组时,此想法可能会被破坏)
编辑:以上不正确。试试$_POST = array_map('trim', $_POST);
。
答案 3 :(得分:6)
这是一个单线程,既可以在单个值上工作,也可以在数组上递归工作:
$_POST = filter_var($_POST, \FILTER_CALLBACK, ['options' => 'trim']);
答案 4 :(得分:2)
您还可以使用我编写的代码,以防您想要清理字符串或使用一个函数的数组:
function sanitize ($value) {
// sanitize array or string values
if (is_array($value)) {
array_walk_recursive($value, 'sanitize_value');
}
else {
sanitize_value($value);
}
return $value;
}
function sanitize_value (&$value) {
$value = trim(htmlspecialchars($value));
}
只需像这样使用它:
$post_sanitized = sanitize($_POST);
$apple_sanitized = sanitize('apple');
答案 5 :(得分:1)
只需使用:
array_walk($_POST, create_function('&$val', '$val = trim($val);'));
现在你的$ _POST被修剪了。
答案 6 :(得分:1)
我认为使用匿名函数更好:
array_walk($_POST, function(& $value){
$value = trim($value);
});
答案 7 :(得分:1)
其他答案对关联数组不起作用。这个递归函数将调整$ _POST数组中所有值的所有值。
{{1}}