我有以下数组,想知道验证和补充此数组的最佳方法是什么,以确保只允许只有整数?
if(is_array($_POST['taxonomy'])) {
$term_ids = array_map('esc_attr', $_POST['taxonomy']);
}
打印时看起来像这样:
Array
(
[0] => 13
[1] => 12
)
我知道esc_attr不是很安全所以想要更加强化一些东西。
任何帮助都会很棒。
干杯,
戴夫
答案 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的一部分,其中包含各种方法来帮助您处理不同类型的数组。