Рекурсия, многомерный массив, пропустить все ключи и их значения через

function in($ms){
    foreach ($ms as $k => $v) 
        $nn[$k] = htmlspecialchars($v, ENT_QUOTES,"UTF-8");

    return $nn;
}
$nn = in([2,2]);

print_r($nn);

Передаю в функцию массив, через цикл проверяю каждое значение.

Вопрос в том, что если массив имеет следующий вид

[2,3,[5,2], ['test' =>'текст', ['m' => 42]]]

То есть не известно количество вложенных массивов, неизвестно что за ключ. Число или строка, так же не известен формат значения.

Как верно составить рекурсивную функцию, для того чтобы каждое значение и каждый ключ пропустить через 'strip_tags, htmlspecialchars, addslashes'. Для того, чтобы снизить уязвимость в данных местах.


Ответы (1 шт):

Автор решения: Borislav
$data = [...]; // your assocc array
array_walk_recursive($data, static function (&$node) {
        if (is_string($node)) {
            // prepare and process your string values by htmlspecialchars, etc.
            //
            // example:
            $node = htmlspecialchars($node);
        }
});

array_walk_recursive

→ Ссылка