mass_stripslashes

¡Hola!

Hice este snippet de código, que sirve básicamente para realizar un stripslashes de todos los elementos de un array, util especialmente en los casos en los que sacamos datos de una base de datos en la que la data no se escapó correctamente, o queremos trabajar con data que está escapada.

(cuando me refiero a escapada, lo hago como una traducción de la palabra escape, que es lo que se le hace a las cadenas de texto para evitar inyecciones SQL y errores con caracteres comunes como ‘ o “. Esos caracteres, escapados, serían transformados en \’ y \”, respectivamente)

function mass_stripslashes($array) {
        foreach($array as $key => $item) {
            if(is_array($item)) {
                $array[$key] = mass_stripslashes($item);
            }
            else {
                $array[$key] = stripslashes($item);
            }
        }
        return $array;
    }

Usar esta función es sencillo, basta simplemente con llamar a la función mass_stripslashes sobre nuestro array, de la siguiente manera:

<?php
$escapedArray = array('key' => 'd\'a\'ngerous v\"alue\' or 1 = 1', 'key2' => 'I love backslashes like this one: \\, but not this one \/');
// Copiar y pegar desde acá:
$unEscapedArray = mass_stripslashes($unEscapedArray);

También desarrollé la versión refurbished de esa, que sería esta:

<?php
function mass_stripslashes($array, $config = array()) {
        if(is_array($array)) {
            foreach($array as $key => $item) {
                if(is_array($item)) {
                    $array[$key] = mass_stripslashes($item);
                } else {
                    if($config['unserialize'] && preg_match('/^a:/', $item)) {
                        $array[$key] = mass_stripslashes(unserialize($item), array('unserialize' => 1, 'trimEmpty' => $config['trimEmpty']));
                    } else {
                        if($config['trimEmpty'] && $item == " ") {
                            $item = trim($item);
                        }
                        $array[$key] = stripslashes($item);
                    }
                }
            }
        }
        return $array;
    }

Que viene con dos posibilidades mas: Remover las cadenas de texto que estén vacías (” “), y unserializar las arrays serializadas. Para ello, tiene dos parámetros opcionales, y para realizar ambas cosas, debería ser llamada de la siguiente manera:

$escapedAndSerialized = serialize(array('key' => 'd\'a\'ngerous v\"alue\' or 1 = 1', 'key2' => 'I love backslashes like this one: \\, but not this one \/', 'lifesMeaning' => " ")); // la vida tiene sentido, pero el array fue hackeado : ) por eso está vacio. (?)
$configuration = array(
  'trimEmpty' => 1,
  'unserialize' => 1,
  );
$lovelyReturn = mass_stripslashes($escapedAndSerialized, $configuration);

Eso debería funcionar. No lo he podido probar, la funcion funciona OK, yo la utilizo frecuentemente.

¡Espero que les sea de utilidad!

Un saludo,
Pedro

Agrega un comentario! los comentarios se aprueban automaticamente

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s