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"
}filter_var_array
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
filter_var_array
Референца за `function.filter-var-array.php` со подобрена типографија и навигација.
filter_var_array
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
filter_var_array — Зема повеќе променливи и опционално ги филтрира
= NULL
$array, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|null
Филтрирај асоцијативно array на вредности користејќи
FILTER_VALIDATE_*
филтри за валидација,
FILTER_SANITIZE_*
филтри за чистење, или сопствени филтри.
Параметри
array-
Асоцијативен array што ги содржи податоците за филтрирање.
options-
Асоцијативна array на опции, или филтерот што треба да се примени на секој запис, што може да биде или филтер за валидација со користење на една од
FILTER_VALIDATE_*константите, или филтер за чистење со користење на една одFILTER_SANITIZE_*constants.The option array is an associative array where the key corresponds to a key in the input array and the associated value is either the filter to apply to this entry, or an associative array describing how and which filter should be applied to this entry.
Асоцијативната низа што опишува како се применува филтерот мора да ја содржи
'filter'клучот чија поврзана вредност е филтерот што треба да се примени, што може да биде една одFILTER_VALIDATE_*,FILTER_SANITIZE_*,FILTER_UNSAFE_RAW, илиFILTER_CALLBACKконстантите. Може опционално да ја содржи'flags'key which specifies any flags that apply to the filter, and the'options'клучот што специфицира какви било опции што се применуваат на филтерот. add_empty-
Додај недостасувачки клучеви како
nullво вратената вредност.
Вратени вредности
На успех, еден array што ги содржи вредностите на бараните променливи.
При неуспех, false се враќа.
Missing entries from the input array are added to the returned array as
null if add_empty is true, and are omitted entirely if it is false.
Запис од вратената array сокети, и го специфицира далечинскиот порт од кој се примаат податоците. Ако сокетот е поврзан-ориентиран, false ако филтерот не успее, освен ако FILTER_NULL_ON_FAILURE знамето се користи, во тој случај ќе биде null. With the FILTER_FORCE_ARRAY flag, that failure value is wrapped in a one element array
like any other result.
Примери
ако е овозможен колекторот за отпадоци, filter_var_array() example
Entries are filtered as scalars unless
FILTER_REQUIRE_ARRAY or
FILTER_FORCE_ARRAY is used. The FILTER_REQUIRE_SCALAR flag on
testscalar below therefore only states that default explicitly.
<?php
$data = [
'product_id' => 'libgd<script>',
'component' => '10',
'versions' => '2.0.33',
'testscalar' => ['2', '23', '10', '12'],
'testarray' => '2',
];
$filters = [
'product_id' => FILTER_SANITIZE_ENCODED,
'component' => [
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY,
'options' => [
'min_range' => 1,
'max_range' => 10,
],
],
'versions' => [
'filter' => FILTER_SANITIZE_ENCODED
],
'testscalar' => [
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
],
'testarray' => [
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY,
],
'doesnotexist' => FILTER_VALIDATE_INT,
];
var_dump(filter_var_array($data, $filters));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
array(6) {
["product_id"]=>
string(17) "libgd%3Cscript%3E"
["component"]=>
array(1) {
[0]=>
int(10)
}
["versions"]=>
string(6) "2.0.33"
["testscalar"]=>
bool(false)
["testarray"]=>
array(1) {
[0]=>
int(2)
}
["doesnotexist"]=>
NULL
}
Example #2 Applying a single filter to all values
Кога options е int, the same filter is applied to every entry in the array.
<?php
$data = [
'name' => '<b>John</b>',
'email' => 'john@example<script>.com',
'bio' => 'Developer & writer',
];
var_dump(filter_var_array($data, FILTER_SANITIZE_SPECIAL_CHARS));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
array(3) {
["name"]=>
string(27) "<b>John</b>"
["email"]=>
string(32) "john@example<script>.com"
["bio"]=>
string(22) "Developer & writer"
}
енџинот: FILTER_CALLBACK
<?php
$data = [
'name' => ' John Doe ',
'city' => ' New York ',
];
$options = [
'name' => [
'filter' => FILTER_CALLBACK,
'options' => 'trim',
],
'city' => [
'filter' => FILTER_CALLBACK,
'options' => function ($value) {
return strtoupper(trim($value));
},
],
];
var_dump(filter_var_array($data, $options));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
array(2) {
["name"]=>
string(8) "John Doe"
["city"]=>
string(8) "NEW YORK"
}
Види Исто така
- filter_input_array() - Добива надворешни променливи и опционално ги филтрира
- filter_var() - Провери за нумерички карактер(и)
- filter_input() - Добива специфична надворешна променлива по име и опционално ја филтрира
-
Филтри за валидација
FILTER_VALIDATE_* -
Филтри за чистење
FILTER_SANITIZE_*
Белешки од корисници 5 белешки
<?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 Web API input validation, it can be useful to separate the application-level validation specification from the low-level PHP filtering API.
Some projects use schema validation libraries to keep validation rules independent from the code that actually executes the validation. The same idea can be applied in a small form with filter_var_array(): define field names and rule names in one array, then convert those rule names into PHP filter descriptors.
<?php
$input = [
'email' => '[email protected]', // valid
'quantity' => '0', // invalid: less than 1
];
// Application-level specification.
// It maps input field names to application rule names.
$app_spec = [
'email' => 'email',
'quantity' => 'quantity',
];
$filter_descriptors = build_filter_descriptors($app_spec);
$result = filter_var_array($input, $filter_descriptors);
var_dump($result);
function build_filter_descriptors(array $app_spec): array
{
$filter_descriptors = [];
foreach ($app_spec as $field => $rule_name) {
$filter_descriptors[$field] = filter_descriptor_for_rule($rule_name);
}
return $filter_descriptors;
}
function filter_descriptor_for_rule(string $rule_name): array
{
return match ($rule_name) {
'email' => [
'filter' => FILTER_VALIDATE_EMAIL,
],
'quantity' => [
'filter' => FILTER_VALIDATE_INT,
'options' => [
'min_range' => 1,
'max_range' => 10,
],
],
};
}FILTER_THROW_ON_FAILURE can be used in each filter descriptor by adding it to the "flags" entry.
<?php
$data = [
'email' => 'not an email',
'age' => '20',
];
$filters = [
'email' => [
'filter' => FILTER_VALIDATE_EMAIL,
'flags' => FILTER_THROW_ON_FAILURE,
],
'age' => [
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_THROW_ON_FAILURE,
'options' => [
'min_range' => 0,
'max_range' => 120,
],
],
];
try {
$result = filter_var_array($data, $filters);
} catch (Filter\FilterFailedException $e) {
echo $e->getMessage(), "\n";
}
?>
When using filter_var_array(), the exception message does not identify which array key failed validation. If you need field-specific validation errors for a form or Web API response, validating each field separately with filter_var() may be easier to handle.
Also note that FILTER_THROW_ON_FAILURE and FILTER_NULL_ON_FAILURE should not be used together.$emails = [
'a' => '[email protected]',
'b' => '<email2>@domain.com',
];
$result = filter_var_array($emails, FILTER_SANITIZE_EMAIL);
print_r($result);
// the result will be...
// array('a' => '[email protected]', 'b' => '[email protected]')