Mr. Clean: saneamiento de datos con PHP

Mr. Clean es una bonita biblioteca escrita en PHP para el saneamiento de datos de forma sencilla. Presten atención que dije sanear y no validar, dos cosas que muchas veces se confunden.

Validar un dato es confirmar o no si cumple una condición determinada, por ejemplo, saber si una entrada es un numero entero o no, en cambio sanear significa filtrar ese dato eliminando todo lo que no responda a una o varias condiciones, siguiendo con el ejemplo del entero, ingresando “e34” el saneamiento de dicha entrada daría como resultado el numero 34 (utilizando filter_var($var, FILTER_SANITIZE_NUMBER_INT)).

Mr. Clean es una biblioteca de saneamiento de datos mucho más avanzada y si se quiere, fácil de utilizar, además permite realizar muchísimas operaciones que pueden volverse bastante complicadas.

saneamiento de datos con php

Mr. Clean permite filtrar arreglos completos, sanear prácticamente cualquier tipo de entrada, convertir valores del tipo booleano, o bien limpiar keys especificas, todo esto en muy pocas lineas de código y de una forma muy pero muy limpia.

Vamos con un ejemplo de funcionamiento:

$movies_seen = [
    'The Dark Knight'   => 'y',
    'The Green Lantern' => 'n',
    'The Avengers'      => 'yes',
];

$scrubbed = $cleaner->scrubbers(['boolean'])->scrub( $movies_seen );

/* Salida:
[
    'The Dark Knight'   => true,
    'The Green Lantern' => false,
    'The Avengers'      => true,
];
*/

Una característica interesante es la de filtrar datos en formato HTML, permitiendo seleccionar que etiquetas aceptamos y cuales no, por defecto hay una lista blanca de etiquetas (en general esta lista va a alcanzar para la mayoría de los propósitos)

$dirty = '<p><p>Some bad HTML here.</p><hr /><em></em><div>Soon to be cleaner.</div>';

$scrubbed = $cleaner->scrubbers(['html'])->scrub( $dirty );

// <p>Some bad HTML here.</p><div>Soon to be cleaner.</div>

Mr. Clean es extremadamente completo, creo que es una de las pocas librerías de saneamiento de datos que contempla prácticamente todos los escenarios. Desde ya les sugiero visitar el apartado de Github del proyecto para aprender sobre todas sus funciones disponibles.

Categorizado en: