0

Ok。引数を取り、危険なhtml文字を文字エンティティに置き換えて同じ引数を返す単純な(っぽい)関数を作成しました。

この関数は、文字列、配列、または 2D 配列のいずれかを引数として取ることができます。3D 配列以上はサポートされていません。

機能は次のとおりです。

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

この関数は機能しますが、問題は、元の配列の配列キーを維持する必要があることです。

この関数の目的は、文字通りデータベース クエリから結果セットを渡し、安全な HTML 文字ですべての値を取得できるようにすることでした。したがって、明らかに、配列内のキーはデータベース フィールドの名前になり、現時点で私の関数はこれらを数値に置き換えています。

そうです、配列キーがそのままの状態で関数に渡された同じ引数を戻す必要があります (配列が渡された場合)。

それが理にかなっていることを願って、提案をいただければ幸いです。

4

2 に答える 2

3

foreach の負荷をネストするのではなく、再帰を使用できます。

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}
于 2009-09-11T16:03:19.160 に答える
1

わかりました、私はこれを自分で考え出したと思います...

私の foreach ループには、たとえば次のようなキーが指定されていませんでした。

foreach($array_val as $val)

それ以外の:

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

この場合、出力配列に配列キーを保存できます。

于 2009-09-11T15:30:22.060 に答える