Pergunta

Ok. Eu escrevi uma função simples (ish) para tirar um argumento e retornar o mesmo argumento com os personagens perigo html substituídos por suas entidades de caracteres.

A função pode tomar como um argumento uma string, um array ou uma matriz 2D -. Matrizes 3d ou mais não são suportadas

A função é a seguinte:

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 função faz o trabalho, mas o problema é que eu preciso para manter as chaves de matriz da matriz original.

O objetivo desta função era torná-lo assim que poderia literalmente passar um conjunto de resultados de uma consulta de banco de dados e receber de volta todos os valores com os caracteres HTML feito seguro. Obviamente, portanto, as chaves na matriz serão os nomes dos campos de banco de dados e minha função no momento é substituir estes com valores numéricos.

Então, sim, eu preciso voltar o mesmo argumento passado para a função com as chaves de matriz ainda intacto (se um array foi aprovada).

A esperança que faz sentido, sugestões apreciado.

Foi útil?

Solução

Você pode usar recursão em vez de cargas de nidificação de foreaches:

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

Outras dicas

Ok eu acho que já figurou este para fora eu mesmo ...

meus foreach loops não tem nenhum chaves especificadas por exemplo, eles foram:

foreach($array_val as $val)

em vez de:

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

caso em que eu poderia ter chaves do array preservadas nos arrrays saída.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top