Question

Ok. J'ai écrit une fonction simple (ish) pour prendre un argument et le renvoyer avec les caractères HTML de danger remplacés par leurs entités de caractères.

La fonction peut prendre comme argument une chaîne, un tableau ou un tableau 2D - les tableaux 3D ou plus ne sont pas pris en charge.

La fonction est la suivante:

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

Cette fonction fonctionne, mais le problème est que je dois conserver les clés de tableau du tableau d'origine.

Le but de cette fonction était de nous permettre de passer littéralement un ensemble de résultats à partir d'une requête de base de données et de récupérer toutes les valeurs contenant les caractères HTML sécurisés. Il est donc évident que les clés du tableau seront les noms des champs de la base de données et ma fonction consiste à les remplacer par des valeurs numériques.

Alors oui, je dois récupérer le même argument transmis à la fonction avec des clés de tableau toujours intactes (si un tableau a été passé).

L’espoir qui a du sens, les suggestions appréciées.

Était-ce utile?

La solution

Vous pouvez utiliser la récursion plutôt que l'imbrication de charges de foreaches:

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

Autres conseils

Ok, je pense avoir trouvé celui-ci moi-même ...

aucune clé n'a été spécifiée dans mes boucles foreach, par exemple:

foreach($array_val as $val)

au lieu de:

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

auquel cas j'aurais pu conserver les clés de tableau dans les tableaux de sortie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top