2011-01-17 19 views
7

Necesito ayuda en una situación inusual. Necesito recortar todas las variables $ _POST.

¿Hay alguna manera de hacerlo con una sola toma, es decir, con una sola función?

sé Trim ($ _ POST) no va a hacer, tengo que hacer alguna función como

function sanatize_post(){ 
    foreach ($_POST as $key => $val) 
     $_POST[$key] = trim($val); 
} 

Pero, si usted tiene cualquier otra sugerencia o comentario, por favor, ayúdame.

Gracias

+0

Si está escribiendo una biblioteca o un marco entonces debería proporcionar más de 'trim'. De lo contrario, para una sola página o un proyecto específico, no debe procesar a ciegas todo el '$ _POST'. Debería saber exactamente qué valores necesita de '$ _POST []', obtener solo ellos y procesar cada uno de sus formas específicas (fe, algún valor podría ser un número; convertirlo en un número entero o flotar es mejor que simplemente recortar los espacios en blanco) – axiac

Respuesta

6

uso array_walk con una función personalizada

$clean_values = array(); 
array_walk($_POST, 'sanitize_post'); 

function sanitize_post($item, $key) 
{ 
    $clean_values[$key] = trim($item); 
    //optional further cleaning ex) htmlentities 
} 
+1

El uso de 'array_walk_recursive' en lugar de' array_walk' cubriría el caso cuando los campos se agrupen en el formulario. – Adam

+0

@ En este brian_d respuesta que usted ha escrito una función personalizada aceptar params $ TEM y la clave $, ¿cómo se pasan a la función ??? –

+0

@SwapnilShende: ¿ha leído la documentación de 'array_walk' ?! – ThiefMaster

9

array_walk($_POST, 'trim') (nótese que esto y la idea puede ser roto como entrada name = foo [bar] se traduce en una matriz)

Editar: Lo anterior no es correcta. Pruebe $_POST = array_map('trim', $_POST);.

+2

También está su 'pariente recursivo http://php.net/manual/en/function.array-walk-recursive.php –

+0

¿me puede explicar por qué me refiero? "(Tenga en cuenta que esta y la idea podrían ser roto como nombre de entrada = foo [bar] se traduce en una matriz) " –

+0

@ IM-JM: vea esto: http: // stackoverflow.com/a/5806722/2093695 –

1

Utilice simplemente este:

array_walk($_POST, create_function('&$val', '$val = trim($val);')); 

y sus $ _POST está recortado.

7

Simplemente:

$_POST = array_map("trim", $_POST); 
1

creo que es mejor utilizar funciones anónimas:

array_walk($_POST, function(& $value){ 
    $value = trim($value); 
}); 
1

También puede utilizar este código que he escrito en caso de que quiera desinfectar una cadena o una matriz con una sola función:

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)); 
} 

Basta con utilizar de esta manera:

$post_sanitized = sanitize($_POST); 
$apple_sanitized = sanitize('apple'); 
1
$_POST = array_map("trim", $_POST); 

Creo que eso puede ayudarlo!

0

Las otras respuestas no funcionaron bien con las matrices asociativas. Estas funciones recursivas recortarán todos los valores dentro de una matriz $ _POST en todos los niveles.

// 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); 
      } 
     } 
    } 
} 
0

Aquí hay una sola línea que también funcionará bien en los valores individuales o de forma recursiva en arrays:

$_POST = filter_var($_POST, \FILTER_CALLBACK, ['options' => 'trim']); 
Cuestiones relacionadas