我有一个程序。它接受字母数字字符串的输入(我已经检查过了(。 因此,有效的输入将是www.example.com/myfile.php?input=John1
但是,如果有人输入www.example.com/myfile.php?input[]
那么它会破坏我整个程序的逻辑中断,因为我不接受输入作为数组。我怎么能不确定用户输入的内容只是一个字符串。不是数组或任何其他数据类型/结构?
解决这个问题的方法缓慢而乏味,涉及大量的手动类型检查。预计在整个应用程序中会磨损键盘if (!is_string($foo))
写入条件。
或者您可以使用专为解决此确切问题而设计的电离器。
<?php
use ParagonIEIonizerGeneralFilterContainer;
use ParagonIEIonizerFilter{
StringFilter,
WhiteList
};
// Define properties to filter:
$ic = new GeneralFilterContainer();
$ic->addFilter(
'username',
(new StringFilter())->setPattern('^[A-Za-z0-9_-]{3,24}$')
)
->addFilter('passphrase', new StringFilter())
->addFilter(
'domain',
new WhiteList('US-1', 'US-2', 'EU-1', 'EU-2')
);
// Invoke the filter container on the array to get the filtered result:
try {
// $post passed all of our filters.
$post = $ic($_POST);
} catch (TypeError $ex) {
// Invalid data provided.
}
如果有人尝试传递数组而不是字符串,$ic($_POST)
会抛出一个TypeError
,然后您可以正常捕获、记录和失败。