У меня есть следующий класс, который я написал:
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
Как это исправить? Любая помощь будет принята с благодарностью.
Ваш код не оценивал массив в $v
Измените свой блок foreach, как это, эта модификация будет дезинфицировать любой уровень вложенного массива,
foreach ($string as $k => $v) {
if(is_array($v))
{
$string[$k] = $this->sanitize($v);
}
else
{
$string[$k] = $this->sanitizeSingle($v);
}
}