从久违的剧本回到剧本后,我陷入了一次突然失败的清理工作。
我在过滤器意外返回中发现了问题false
。
这是一个复制我的意外结果的示例:
$test = [ 'apple', 'bananna', 'orange', 'lime', 'grape', ];
var_export( filter_var( $test, FILTER_UNSAFE_RAW )); // false
我认为这FILTER_UNSAFE_RAW
应该只是返回输入(在这种情况下是一个数组)不变。
我的理解/方法错了吗?
注意:
我的代码必须严格自力更生并且尽可能轻量级,因此我只是在需要的地方编写简单的辅助函数,而不是加载第 3 方库/类。
例子:
$filters = [
'sanitize' => [
'foo' => FILTER_SANITIZE_EMAIL,
'bar' => FILTER_UNSAFE_RAW,
],
'validate' => [
'foo' => FILTER_VALIDATE_EMAIL,
'bar' => [
'filter' => FILTER_VALIDATE_REGEXP,
'flags' => FILTER_REQUIRE_ARRAY,
'options' => [ 'regexp' => '/(apple|grape)/' ],
],
],
];
$test = [
'malicious' => 'something bad',
'foo' => 'test@ema.il',
'bar' => [ 'apple', 'grape', 'orange', ],
];
// validate
$checked = sanitizeInput( $filters, $test );
// sanitizer
function sanitizeInput( $f, $input )
{
// sanitize
$sanitized = filter_var_array( $input, $f['sanitize'] )
// validate
$validated = filter_var_array( $sanitized, $f['validate'] );
// if anything appears to have failed validation (was set to FALSE)
if( FALSE !== strpos( json_encode($validated), 'false' ))
{
...
如您所见,这种方法需要bar
通过清理,即使不需要清理操作。
我误会了FILTER_UNSAFE_RAW
吗?