PHP 清理/验证整数数组

发布于 2024-12-08 18:25:51 字数 352 浏览 0 评论 0原文

我有以下数组,想知道验证和清理该数组以确保仅允许整数的最佳方法是什么?

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

打印时看起来像这样:

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

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

任何帮助都会很棒。

干杯,

戴夫

I have the following array and would like to know what the best way would be of validating and santizing this array to make sure only integers are allowed?

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

Which looks like this when printed:

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

I know the esc_attr isn't very secure so would like something a bit more beefed up.

Any help would be great.

Cheers,

Dave

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

彩虹直至黑白 2024-12-15 18:25:51

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

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

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

Since it's $_POST data, you'll want to check for ctype_digit (i.e. a string containing only digits):

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

Note that this simply discards non-numeric values.

梨涡少年 2024-12-15 18:25:51

另一种方法是使用 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)
}
*/

An alternative would be using phps filter functions:

$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)
}
*/
々眼睛长脚气 2024-12-15 18:25:51
if(is_array($_POST['taxonomy'])) {
    $term_ids = array_map('intval', $_POST['taxonomy']);
}

应该做到这一点。注意:这是卫生。更多:http://php.net/manual/en/function.intval.php

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

Should do the trick. NOTE: this is sanitation. More: http://php.net/manual/en/function.intval.php

动次打次papapa 2024-12-15 18:25:51
foreach( $array as $key => $value) {
    $array[$key] = (int) $value;

    if( $array[$key] != $value ) {
        // error
    }
}
foreach( $array as $key => $value) {
    $array[$key] = (int) $value;

    if( $array[$key] != $value ) {
        // error
    }
}
无法回应 2024-12-15 18:25:51

如果您正在寻找单行代码来检查指定条件,您可以使用:

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

假设您的 $_POST['taxonomy'] 可以包含@deceze 建议的数字字符串,或者只是简单:

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

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

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

If you are looking for one-liner to check against specified condition you can use:

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

assuming your $_POST['taxonomy'] can contain numeric strings as @deceze suggested, or just plain:

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

if you are sure that $_POST['taxonomy'] values should be in fact integers.

Arr::check method is a part of this php array library which contains various methods to help you deal with different types of arrays.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文