Pregunta

Ok. He escrito una función simple (ish) para tomar un argumento y devolver el mismo argumento con los caracteres html de peligro reemplazados con sus entidades de caracteres.

La función puede tomar como argumento una cadena, una matriz o una matriz 2D - las matrices 3d o más no son compatibles.

La función es la siguiente:

public function html_safe($input)
{   
    if(is_array($input)) //array was passed
    {
        $escaped_array = array();
        foreach($input as $in)
        {
            if(is_array($in)) //another array inside the initial array found
            {
                $inner_array = array();
                foreach($in as $i)
                {
                    $inner_array[] = htmlspecialchars($i);
                }
                $escaped_array[] = $inner_array;
            }
            else
                $escaped_array[] = htmlspecialchars($in);
        }
        return $escaped_array;
    }
    else // string
        return htmlspecialchars($input);
}

Esta función funciona, pero el problema es que necesito mantener las claves de matriz de la matriz original.

El propósito de esta función era hacerlo para que literalmente pudiéramos pasar un conjunto de resultados de una consulta de base de datos y recuperar todos los valores con los caracteres HTML protegidos. Obviamente, por lo tanto, las claves de la matriz serán los nombres de los campos de la base de datos y mi función en este momento es reemplazar estos con valores numéricos.

Así que sí, necesito recuperar el mismo argumento pasado a la función con las claves de matriz aún intactas (si se pasó una matriz).

Espero que tenga sentido, sugerencias apreciadas.

¿Fue útil?

Solución

Puede usar recursión en lugar de anidar cargas de foreaches:

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}

Otros consejos

Ok, creo que ya lo he descubierto yo mismo ...

mis bucles foreach no tenían ninguna clave especificada, por ejemplo, eran:

foreach($array_val as $val)

en lugar de:

foreach($array_val as $key => $val)

en cuyo caso podría haber conservado las claves de matriz en los arreglos de salida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top