PHP清理/验证整数数组

时间:2011-10-07 07:46:33

标签: php arrays validation integer sanitization

我有以下数组,想知道验证和补充此数组的最佳方法是什么,以确保只允许只有整数

if(is_array($_POST['taxonomy'])) {
    $term_ids = array_map('esc_attr', $_POST['taxonomy']);
}

打印时看起来像这样:

Array
(
    [0] => 13
    [1] => 12
)

我知道esc_attr不是很安全所以想要更加强化一些东西。

任何帮助都会很棒。

干杯,

戴夫

5 个答案:

答案 0 :(得分:13)

由于它是$_POST数据,您需要检查ctype_digit(即只包含数字的字符串):

$sanitizedValues = array_filter($_POST['taxonomy'], 'ctype_digit');

请注意,这只会丢弃非数字值。

答案 1 :(得分:5)

另一种方法是使用phps filter函数:

$array = array(
  13, 12, '1', 'a'
);

$result = filter_var($array, FILTER_VALIDATE_INT, array(
  'flags'   => FILTER_REQUIRE_ARRAY,
  'options' => array('min_range' => 1)
));

var_dump($result);

/*
array(4) {
  [0]=>
  int(13)
  [1]=>
  int(12)
  [2]=>
  int(1)
  [3]=>
  bool(false)
}
*/

答案 2 :(得分:1)

foreach( $array as $key => $value) {
    $array[$key] = (int) $value;

    if( $array[$key] != $value ) {
        // error
    }
}

答案 3 :(得分:1)

if(is_array($_POST['taxonomy'])) {
    $term_ids = array_map('intval', $_POST['taxonomy']);
}

应该做的伎俩。注意:这是卫生设施。更多:http://php.net/manual/en/function.intval.php

答案 4 :(得分:0)

如果您要寻找一种衬板来检查指定条件,则可以使用:

$onlyIntegers = Arr::check($_POST['taxonomy'], 'ctype_digit');

假设您的$_POST['taxonomy']可以包含@deceze建议的数字字符串,也可以仅包含数字字符串:

$onlyIntegers = Arr::check($_POST['taxonomy'], 'is_int');

如果您确定$_POST['taxonomy']的值实际上应该是整数。

Arr::check方法是此php array library的一部分,其中包含各种方法来帮助您处理不同类型的数组。