filter_var_array
(PHP 5 >= 5.2.0)
filter_var_array — Принимает несколько переменных и, при необходимости, фильтрует их
Описание
Эта функция полезна для получения множества переменных без многократного вызова функции filter_var().
Список параметров
-
data
-
Массив со строковыми ключами, содержащий данные для фильтрации.
-
definition
-
Массив, определяющий параметры. Допустимый ключ - строка string, содержащая имя переменной и допустимое значение - или тип фильтра, или массив array, при необходимости определяющий фильтр, флаги и параметры. Если значение является массивом, допустимыми ключами являются filter, который определяет тип фильтра, flags, который определяет любые флаги, применяемые к фильтру, и options, который определяет любые параметры, применяемые к фильтру. См. пример ниже для лучшего понимания.
Этот параметр также может быть целым числом, содержащим предопределенную фильтровую константу. Затем все значения во входном массиве фильтруются этим фильтром.
Возвращаемые значения
Массив, содержащий значения запрошенных переменных в случае успеха, или FALSE
в случае возникновения ошибки. Значение массива будет FALSE
, если фильтрация завершилась неудачей, или NULL
,
если если переменная не определена.
Примеры
Пример #1 Пример использования filter_var_array()
<?php
error_reporting(E_ALL | E_STRICT);
$data = array(
'product_id' => 'libgd<script>',
'component' => '10',
'versions' => '2.0.33',
'testscalar' => array('2', '23', '10', '12'),
'testarray' => '2',
);
$args = array(
'product_id' => FILTER_SANITIZE_ENCODED,
'component' => array('filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY,
'options' => array('min_range' => 1, 'max_range' => 10)
),
'versions' => FILTER_SANITIZE_ENCODED,
'doesnotexist' => FILTER_VALIDATE_INT,
'testscalar' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
),
'testarray' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY,
)
);
$myinputs = filter_var_array($data, $args);
var_dump($myinputs);
echo "\n";
?>
Результат выполнения данного примера:
array(6) { ["product_id"]=> array(1) { [0]=> string(17) "libgd%3Cscript%3E" } ["component"]=> array(1) { [0]=> int(10) } ["versions"]=> array(1) { [0]=> string(6) "2.0.33" } ["doesnotexist"]=> NULL ["testscalar"]=> bool(false) ["testarray"]=> array(1) { [0]=> int(2) } }
Смотрите также
- filter_input_array() - Принимает несколько переменных извне PHP и, при необходимости, фильтрует их
- filter_var() - Фильтрует переменную с помощью определенного фильтра
- filter_input() - Принимает переменную извне PHP и, при необходимости, фильтрует ее
- Types of filters
Коментарии
<?php
//an example of simply sanitize an array..
$data = array(
'<b>bold</b>',
'<script>javascript</script>',
'P*}i@893746%%%p*.i.*}}|.dw<?php echo "echo works!!";?>');
$myinputs = filter_var_array($data,FILTER_SANITIZE_STRING);
var_dump($myinputs);
//OUTPUT:
//formarray(3) { [0]=> string(4) "bold" [1]=> string(10) "javascript" [2]=> string(26) "P*}i@893746%%%p*.i.*}}|.dw" }
?>
for those who would like to know how to use regular expressions with filter var array. taken from w3 schools.
$data = array(
'regxp' => 'michael'
);
$args = array(
'regxp' => array(
'filter'=>FILTER_VALIDATE_REGEXP | FILTER_SANITIZE_STRING,
'options'=>array('regexp'=>"/^michael$/"),
));
$output=filter_var_array($data,$args);
var_dump($output); // array(1) { ["regxp"]=> string(7) "michael" }
- bruce tong
an update to previous post.
using regular expressions along with another filter in filter var array
$data = array(
'regxp' => "`\tcafé\n`"
);
$args = array(
'regxp' => array(
'filter'=>FILTER_VALIDATE_REGEXP | FILTER_SANITIZE_STRING,
'flags'=>FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK,
'options'=>array('regexp'=>"/t(.*)/"),
));
$output=filter_var_array($data,$args);
var_dump($output); // array(1) { ["regxp"]=> string(3) "caf" }
-bruce tong
$emails = [
'a' => 'email1@domain.com',
'b' => '<email2>@domain.com',
];
$result = filter_var_array($emails, FILTER_SANITIZE_EMAIL);
print_r($result);
// the result will be...
// array('a' => 'email1@domain.com', 'b' => 'email2@domain.com')
To apply the same filter to many params/keys, use array_fill_keys().
<?php
$data = array(
'product_id' => 'libgd<script>',
'component' => ' 10 ',
'versions' => '2.0.33',
'testscalar' => array('2', '23', '10', '12'),
'testarray' => '2',
);
$keys = array(
'product_id',
'component',
'versions',
'doesnotexist',
'testscalar',
'testarray'
);
$options = array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
);
$args = array_fill_keys($keys, $options);
/* Result
$args = array(
'product_id' => array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
),
'component' => array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
),
'versions' => array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
),
'doesnotexist' => array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
),
'testscalar' => array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
),
'testarray' => array(
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return trim(strip_tags($value));
},
),
);
*/
$myinputs = filter_var_array($data, $args);
var_dump($myinputs);
Output:
array(6) {
'product_id' =>
string(5) "libgd"
'component' =>
string(2) "10"
'versions' =>
string(6) "2.0.33"
'doesnotexist' =>
NULL
'testscalar' =>
array(4) {
[0] =>
string(1) "2"
[1] =>
string(2) "23"
[2] =>
string(2) "10"
[3] =>
string(2) "12"
}
'testarray' =>
string(1) "2"
}