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 для этого