PHP необходимо обрезать все переменные $_POST
Вам нужна помощь в непростой ситуации. Мне нужно обрезать все переменные $_POST.
Есть ли способ сделать это одним выстрелом, то есть с использованием одной функции?
Я знаю, что trim ($ _ POST) не будет делать, мне нужно сделать некоторую функцию, например
function sanatize_post(){
foreach ($_POST as $key => $val)
$_POST[$key] = trim($val);
}
Но если у вас есть какие-либо другие предложения или комментарии, пожалуйста, помогите мне.
Спасибо
Ответы
Ответ 1
используйте 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
Просто
$_POST = array_map("trim", $_POST);
Но если члены $ _POST (даже если 1 из них) снова сам массив, то используйте рекурсивную версию:
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;
}
Ответ 3
array_walk($_POST, 'trim')
(обратите внимание, что это и идея может быть нарушена, поскольку входное имя = foo [bar] переводится в массив)
Изменить: приведенное выше неверно. Попробуйте $_POST = array_map('trim', $_POST);
.
Ответ 4
Здесь однострочный, который также будет работать либо на одиночных значениях, либо рекурсивно на массивах:
$_POST = filter_var($_POST, \FILTER_CALLBACK, ['options' => 'trim']);
Ответ 5
Вы также можете использовать этот код, который я написал, если вы хотите дезинформировать строку ИЛИ массив с одной функцией:
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');
Ответ 6
Просто используйте это:
array_walk($_POST, create_function('&$val', '$val = trim($val);'));
и ваш $_POST теперь обрезается.
Ответ 7
Я думаю, что лучше использовать анонимные функции:
array_walk($_POST, function(& $value){
$value = trim($value);
});
Ответ 8
$_POST = array_map("trim", $_POST);
Я думаю, это может вам помочь!
Ответ 9
Другие ответы не работали с ассоциативными массивами. Эти рекурсивные функции будут обрезать все значения внутри массива $_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);
}
}
}
}
Ответ 10
вау это все решило для меня
я положил его в заголовок и все мои формы теперь чистые
Большой Tnx для этого