PHP Conference Japan 2024

过滤器函数

目录

添加注释

用户贡献的注释 2 条注释

vojtech at x dot cz
17 年前
还要注意,即使您稍后在脚本中更改了超级全局变量($_GET、$_POST 等)中的值,过滤器函数也只使用传递给脚本的原始变量值。

<?php
echo filter_input(INPUT_GET, 'var'); // 输出 'something'
echo $_GET['var']; // 输出 'something'
$_GET['var'] = 'changed';
echo
filter_input(INPUT_GET, 'var'); // 输出 'something'
echo $_GET['var']; // 输出 'changed'
?>

事实上,外部数据在脚本处理之前在 SAPI 中被复制,并且过滤器函数不再使用超级全局变量(如下面的过滤器教程中“它是如何工作的?”部分所述)。
fumble1 at web dot de
17 年前
我建议您使用 FILTER_REQUIRE_SCALAR(或 FILTER_REQUIRE_ARRAY)标志,因为您可以使用方括号访问字符串偏移量和数组元素——但是,这不仅会导致意外的行为。请看这个例子

<?php
$image
= basename(filter_input(INPUT_GET, 'src', FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW));
// 进一步检查
?>

/script.php?src[0]=foobar 将导致警告。:-(
因此我的建议

<?php
$image
= basename(filter_input(INPUT_GET, 'src', FILTER_UNSAFE_RAW, FILTER_REQUIRE_SCALAR | FILTER_FLAG_STRIP_LOW));
// 进一步检查
?>
To Top