PHP初始化/验证整数数组
我有下面的数组,想知道验证和调整数组大小的最佳方法是什么,以确保只允许整数PHP初始化/验证整数数组,php,arrays,validation,integer,sanitization,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不是很安全,所以我想再加强一点 任何帮助都会很好 干杯 Dave因为它是$\u POST数据,
if(is_array($_POST['taxonomy'])) {
$term_ids = array_map('esc_attr', $_POST['taxonomy']);
}
打印时看起来是这样的:
Array
(
[0] => 13
[1] => 12
)
我知道esc_attr不是很安全,所以我想再加强一点
任何帮助都会很好
干杯
Dave因为它是
$\u POST
数据,所以您需要检查(即仅包含数字的字符串):
请注意,这只是丢弃非数值
if(is_array($_POST['taxonomy'])) {
$term_ids = array_map('intval', $_POST['taxonomy']);
}
我们应该做到这一点。注意:这是卫生设施。更多信息:另一种选择是使用phps功能:
$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)
}
*/
如果您正在寻找一个衬板,以根据指定条件进行检查,您可以使用:
$onlyIntegers=Arr::check($_POST['taxonomy'],'ctype_digit');
假设您的$\u POST['taxonomy']
可以像@deceze建议的那样包含数字字符串,或者只是简单的:
$onlyIntegers=Arr::check($_POST['taxonomy'],'is_int');
如果您确定$\u POST['taxonomy']
值实际上应该是整数
Arr::check
方法是其中的一部分,它包含各种方法来帮助您处理不同类型的数组。无论发生什么情况,都将它们转换为int…如果它是一个字符串,我只会使用(int),但是否有类似的方法用于数组?感谢您的回复您对循环中的数组值执行此操作,只需将它们强制转换并映射到int。POST数据从来都不是int
,而是字符串。这看起来像数字:数组([0]=>13[1]=>12)是的,但它们是字符串,而不是int
s。只是尝试了一下,它似乎可以立即工作,谢谢大家的评论,非常有帮助!但这有多安全?如果有人向这个数组中注入了什么东西?(我们在黑客方面遇到了一些问题,因此我将检查所有代码并堵塞所有漏洞)。欢迎使用此选项,您可以确保$sanitizedValues
仅包含仅包含数字的字符串。没有更多,没有更少。非常好,非常干净。干杯@deceze和其他发布回复的人。很好。正是我想要的。荣誉。更详细,但技术上更合适+1:)对不起,伙计们,这两者有什么区别?如果你只验证一个字段,我想这只是品味的问题。不过,如果您有很多验证过滤器函数的工作,则可以节省一些工作(请参见示例)。我想,如果你或其他人必须在3个月后理解你在做什么,过滤函数会更清楚地显示发生了什么。目前它只是一个输入。我已经检查了filter\u input\u数组,它看起来非常有用!我也会+1这个答案,非常感谢@Yoshi的帮助和建议。每天都是上学的日子:-)
if(is_array($_POST['taxonomy'])) {
$term_ids = array_map('intval', $_POST['taxonomy']);
}
$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)
}
*/