我需要在一个不寻常的情况下向您求助。我需要修剪所有的 $_POST 变量。
有没有一种方法可以一次完成,即使用单个函数?
我知道 trim($_POST) 不起作用,我必须创建某些函数,例如:
function sanatize_post(){
foreach ($_POST as $key => $val)
$_POST[$key] = trim($val);
}
但是,如果你有任何其他建议或评论,请帮助我。
谢谢
我需要在一个不寻常的情况下向您求助。我需要修剪所有的 $_POST 变量。
有没有一种方法可以一次完成,即使用单个函数?
我知道 trim($_POST) 不起作用,我必须创建某些函数,例如:
function sanatize_post(){
foreach ($_POST as $key => $val)
$_POST[$key] = trim($val);
}
但是,如果你有任何其他建议或评论,请帮助我。
谢谢
$_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;
}
这里有一个一行代码,它可以适用于单个值或递归地作用于数组:
$_POST = filter_var($_POST, \FILTER_CALLBACK, ['options' => 'trim']);
使用自定义函数和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
}
array_walk_recursive
而不是 array_walk
可以涵盖表单中字段分组的情况。 - Adamarray_walk($_POST, 'trim')
(请注意,这个方法和想法可能是错误的,因为输入名称= foo [bar] 会被转换成数组)
编辑:上面的不正确。尝试使用$_POST = array_map('trim', $_POST);
.
function custom(&$a){ $a= trim($a);}
。 - Adam
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');
我认为最好使用匿名函数:
array_walk($_POST, function(& $value){
$value = trim($value);
});
array_walk($_POST, create_function('&$val', '$val = trim($val);'));
而且你的 $_POST 现在被修剪过了。
// Trim all values of associative array
function trim_associative_array(&$input_array) {
if (is_array($input_array)) {
foreach ($input_array as $key => &$val) {
if (is_array($val)) {
trim_associative_array($val);
} else {
$input_array[$key] = trim($val);
}
}
}
}
array_walk_recursive
- 将其替换为上面使用 array_walk
的答案之一。或者递归应用 array_map,这样你就不必自己编写递归了。 - ToolmakerSteve
trim
更多的功能。否则,对于单个页面或特定项目,你不应该盲目地处理整个$_POST
。你应该知道确切需要从$_POST[]
中获取哪些值,并仅获取这些值,然后按其特定方式分别处理每个值(例如,某个值可能是数字;将其转换为整数或浮点数比仅修剪空格更好)。 - axiac