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

Advertisements

Agrega un comentario! los comentarios se aprueban automaticamente

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s