Обеззараживать и дезинфицировать многомерный массив

1

У меня есть следующий класс, который я написал:

class Sanitizer {

    public function sanitizeSingle ($string) {  
        if (get_magic_quotes_gpc()) {
            $string = stripslashes($string);
        }

        return trim(htmlspecialchars($string, ENT_QUOTES)); 
    }

    public function sanitize ($string) {
        if (is_array($string)) {
            foreach ($string as $k => $v) {
                $string[$k] = $this->sanitizeSingle($v);
            }
        }
        else {
            $string = $this->sanitizeSingle($string);
        }

        return $string;
    }

    public function desanitize ($string) {
        return trim(htmlspecialchars_decode($string, ENT_QUOTES));
    }

}

Проблема в том, что, хотя он работает с строками и одномерными массивами, я получаю следующую ошибку при использовании многомерных массивов:

Предупреждение: htmlspecialchars() ожидает, что параметр 1 будет строкой, массив указан в C:\wamp\www\classes\Sanitizer.php в строке 10

Как это исправить? Любая помощь будет принята с благодарностью.

Теги:
arrays
multidimensional-array

1 ответ

1
Лучший ответ

Ваш код не оценивал массив в $v Измените свой блок foreach, как это, эта модификация будет дезинфицировать любой уровень вложенного массива,

 foreach ($string as $k => $v) {
        if(is_array($v))
        {
            $string[$k] = $this->sanitize($v);
        }
        else
        {
            $string[$k] = $this->sanitizeSingle($v);
        }
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню