こんにちわ、isamです。
今日はフォームの値をサニタイズする自作関数の紹介!
使い方はブロックを参照!
/**
* 配列を再帰的にサニタイズフィルタリング
*
* <code>
* $filter_func = array(
* 'trim' => array("%%_val_%%"),
* 'htmlspecialchars' => array("%%_val_%%", ENTQUTOES),
* 'str_replace' => array("\0", "", "%%_val_%%")
* );
*
* $key_func = array(
* 'id' => array("intval" => array("%%_val_%%")),
* 'pid' => array("intval" => array("%%_val_%%"))
* );
*
* $ignore_keys = array("test");
*
* querySanitaizeFilter($_REQUEST, $filter_func, $key_func, $ignore_keys);
* </code>
*
* @param &$request サニタイズフィルタリングを適用する配列
* @param $filter_func サニタイズフィルタリング用関数配列
* @param $key_func サニタイズフィルタリングを個別にしたキーと関数の配列
* @param $ignore_keys サニタイズフィルタリングを適用しないキー
* @void
*/
function querySanitaizeFilter(&$request, $filter_func, $key_func = array(), $ignore_keys = array()) {
foreach ($request as $key => $val) {
if (is_array($val)){
querySanitaizeFilter($request[$key], $filter_func);
} else {
foreach ($filter_func as $func => $params) {
$new_params = array();
foreach ($params as $param) {
if ("%%_val_%%" == $param) {
$param = $val;
}
$new_params[] = $param;
}
if (in_array($key, $ignore_keys)) {
continue;
}
$request[$key] = call_user_func_array($func, $new_params);
}
foreach ($key_func as $key => $val) {
foreach ($val as $func => $params) {
$new_params = array();
foreach ($params as $param) {
if ("%%_val_%%" == $param) {
$param = $request[$key];
}
$new_params[] = $param;
}
$request[$key] = call_user_func_array($func, $new_params);
}
}
}
}
}