Domanda

Ok. Ho scritto una semplice funzione (ish) per prendere un argomento e restituire lo stesso argomento con i caratteri html di pericolo sostituiti con le loro entità carattere.

La funzione può assumere come argomento una stringa, una matrice o una matrice 2D - le matrici 3d o più non sono supportate.

La funzione è la seguente:

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

Questa funzione funziona, ma il problema è che devo mantenere le chiavi dell'array dell'array originale.

Lo scopo di questa funzione era di renderlo in modo da poter letteralmente passare un set di risultati da una query del database e recuperare tutti i valori con i caratteri HTML resi sicuri. Ovviamente, quindi, le chiavi dell'array saranno i nomi dei campi del database e la mia funzione al momento sta sostituendoli con valori numerici.

Quindi sì, ho bisogno di recuperare lo stesso argomento passato alla funzione con i tasti dell'array ancora intatti (se un array è stato passato).

Spero che abbia un senso, suggerimenti apprezzati.

È stato utile?

Soluzione

Puoi usare la ricorsione piuttosto che nidificare un sacco di foreaches:

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

Altri suggerimenti

Ok, penso di averlo capito da solo ...

i miei loop foreach non avevano alcuna chiave specificata, ad esempio:

foreach($array_val as $val)

anziché:

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

nel qual caso avrei potuto conservare le chiavi dell'array negli array di output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top