I have the following class I wrote:
JavaScript
x
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));
}
}
The problem is that while it works on strings and one-dimensional arrays, I get the following error with multidimensional arrays:
Warning: htmlspecialchars() expects parameter 1 to be string, array given in C:wampwwwclassesSanitizer.php on line 10
How do I fix this? Any help would be greatly appreciated.
Advertisement
Answer
Your code was not evaluating array in $v
Modify your foreach block like this, this modification will sanitize any level of nested array,
JavaScript
foreach ($string as $k => $v) {
if(is_array($v))
{
$string[$k] = $this->sanitize($v);
}
else
{
$string[$k] = $this->sanitizeSingle($v);
}
}