配列に入った値をサニタイズする関数をつくったのですが、

function check($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$d = htmlspecialchars($data, ENT_QUOTES);
}
}

シェル上では、問題なく動作しているのに、
ブラウザでPOSTされた値を上記関数に入れ込むとなぜかサニタイズされません
しかし、check(check($data))のように2回上記関数に入れ込んでやるとしっかりサニタイズされます
POSTされた値だけ1回でうまくサニタイズされないのはどうしてでしょうか