php5.2 中新的输入检查函数
来源:互联网 发布:js菜单栏滑动 编辑:程序博客网 时间:2024/04/29 12:01
,在IBM DW的http://www.ibm.com/developerworks/cn/opensource/os-php-v522/index.html上有很好的介绍,下面笔记并补充之
过滤扩展功能有两种过滤器:Sanitizing 和 Logical。
Sanitizing 过滤器只是允许或禁止字符串中的字符并将清理后的字符串作为结果返回。无论您将哪种数据格式传入这些函数,它们将始终返回字符串。对于特定类型的使用,这是至关重要的,因为您可以阻止用户发送不适当的输入并导致异常结果。例如,用户可以发现文本块的输入被返回到以下页面上并且要利用那些返回信息。如果清理输入,则将删除输入的所有危险部分。
Logical 过滤器将对变量执行测试并根据测试提供 true 或 false 结果。然后您可以使用结果来决定如何处理数据或获得用户的地址。这种过滤器的简单示例是验证年龄。逻辑测试还可以针对类似 Perl 的正则表达式进行测试。
<?php
echo "You are " . filter_var($_GET['1'], FILTER_SANITIZE_STRING) . ".<br>\n";
echo "Your favorite color is " . filter_var($_GET['2'], FILTER_SANITIZE_STRING) .
".<br>\n";
echo "The airspeed of an unladen swallow is " . filter_var($_GET['3'], FILTER_SANITIZE_STRING)
. ".<br>\n";
?>
用 filter_var()
函数来清理输入并使其有效并且安全。在这种情况下,使用选项 FILTER_SANITIZE_STRING
,该选项将获取输入、删除所有 HTML 标记并选择性地编码或删除特定字符。
由于它将除去 HTML 标记,因此尝试运行 JavaScript 将失败,并且从脚本中获得更适当的结果。
再补充些
PHP: indicates the earliest version of PHP that supports the function.
Function Description PHP filter_has_var() Checks if a variable of a specified input type exist 5 filter_id() Returns the ID number of a specified filter 5 filter_input() Get input from outside the script and filter it 5 filter_input_array() Get multiple inputs from outside the script and filters them 5 filter_list() Returns an array of all supported filters 5 filter_var_array() Get multiple variables and filter them 5 filter_var() Get a variable and filter it 5PHP Filters
ID Name Description FILTER_CALLBACK Call a user-defined function to filter data FILTER_SANITIZE_STRING Strip tags, optionally strip or encode special characters FILTER_SANITIZE_STRIPPED Alias of "string" filter FILTER_SANITIZE_ENCODED URL-encode string, optionally strip or encode special characters FILTER_SANITIZE_SPECIAL_CHARS HTML-escape '"<>& and characters with ASCII value less than 32 FILTER_SANITIZE_EMAIL Remove all characters, except letters, digits and !#$%&'*+-/=?^_`{|}~@.[] FILTER_SANITIZE_URL Remove all characters, except letters, digits and $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&= FILTER_SANITIZE_NUMBER_INT Remove all characters, except digits and +- FILTER_SANITIZE_NUMBER_FLOAT Remove all characters, except digits, +- and optionally .,eE FILTER_SANITIZE_MAGIC_QUOTES Apply addslashes() FILTER_UNSAFE_RAW Do nothing, optionally strip or encode special characters FILTER_VALIDATE_INT Validate value as integer, optionally from the specified range FILTER_VALIDATE_BOOLEAN Return TRUE for "1", "true", "on" and "yes", FALSE for "0", "false", "off", "no", and "", NULL otherwise FILTER_VALIDATE_FLOAT Validate value as float FILTER_VALIDATE_REGEXP Validate value against regexp, a Perl-compatible regular expression FILTER_VALIDATE_URL Validate value as URL, optionally with required components FILTER_VALIDATE_EMAIL Validate value as e-mail FILTER_VALIDATE_IP Validate value as IP address, optionally only IPv4 or IPv6 or not from private or reserved ranges检测判断的例子
处理脚本:
filter_has_var检测给定的变量是否存在。它不会做任何处理只会告诉程序变量是否已经设置。相当于isset($_POST[‘submit’])。filter_input会取得一个变量返回处理好的数据。在上面的例子中会返回一个整数。
如果是要返回一个处于一定范围之内的值,假设是7-77岁之间的人。可以指定一个最大值和一个最小值。
如果是要判断一个有效的邮件地址的话,可以这样:
如果邮件地址不正确或者是空的话$email的值将为FALSE。
过滤判断的例子
下面的filter_input函数将自动过滤并返回适当的值:
如果接收到的name值是:
Johnny Weißmüller <b>Jr</b>
FILTER_SANITIZE_SPECIAL_CHARS 将会返回:
Hello Johnny Weißmüller <b>Jr</b>.
一个更好的过滤写法:
输出:
Hello Johnny Weißmüller Jr.
这里的函数还有很多选项,如果你想了解更多的细节可以查看Filter的文档。
如何一次处理所有输入?
处理程序:
正如上面例子中的,通过一个函数就能处理所有的变量。唯一不同的就是事先定义一个对应的数组。需要注意的是数组中选项的正确性。
这样的做法不但增加了程序的易读性,并且如果要添加移除或者修改处理规则也会非常方便。
更复杂的处理
在下面的处理“favourites”变量时用到了用户自定义函数。"options"指定一个用户自定义函数通过定义callback来实现,语法和PHP的call_user_func一样。
- php5.2 中新的输入检查函数
- php5.2 中新的输入检查函数
- PHP5 新函数
- Php5新添加了好多的新函数和特征
- PHP5.2 使用新输入过滤扩展功能[来自IBM]
- PHP5.2 :新的内存管理器
- php5中XML-RPC函数的使用
- php5中XML-RPC函数的使用
- PHP5.4中删除的安全函数
- PHP5中虚函数的实现
- php5中虚函数的实现
- php5中类的一些新的特征
- 在PHP5中类(CLASS)的新特征
- PHP5.4新的array语法(中括号简写)
- PHP5中字符串函数
- javascript检查输入函数备忘
- PHP5的XML新特性
- PHP5的XML新特性
- mysql 5中的mysqli新支持的preparestament
- ucos review_1
- mysql5中用事务的模式
- asp.net 中一次上传多个文件
- PHP5 OOP新手快速入门例子
- php5.2 中新的输入检查函数
- [转]REST 学习
- jndi快速上手
- Android数据存储和访问之调用WebService
- tomcat 5.08中虚拟主机设置笔记
- (转)看盘ABC:看盘七大指标
- (转)涨停板研判:两种情况五个含义
- 极限编程学习1
- smarty学习1