PHP 5.2 以上提供了一个非常简单好用的自带函数 filter_var ,下面是对这个函数使用的详细介绍。
验证数据类型是否为boolean
举例:
<?php
$value01 = TRUE;
if(filter_var($value01,FILTER_VALIDATE_BOOLEAN)) {
echo 'TRUE';
} else {
echo 'FALSE';
}
echo '<br /><br />';
$value02 = TRUE;
if(filter_var($value02,FILTER_VALIDATE_BOOLEAN)) {
echo 'TRUE';
} else {
echo 'FALSE';
}
?>
FILTER_VALIDATE_EMAIL 验证是否为email
FILTER_VALIDATE_FLOAT:验证是否为浮点型
FILTER_VALIDATE_INT:验证是否为整型
FILTER_VALIDATE_IP:验证是否是合法IP
FILTER_VALIDATE_URL:验证是否是合法URL
FILTER_SANITIZE_STRING:对字符串进行消毒过滤,这个参数会过滤并把不合法的用户输入自动去掉,例如:HTML标签等。
举例程序:
<?php
$value = "<script>alert('TROUBLE HERE');</script>";
echo filter_var($value, FILTER_SANITIZE_STRING);
echo "<br>";
$value = "<body>alert('boy's book');</body>";
echo filter_var($value,FILTER_SANITIZE_STRING);
?>
你将会得到如下一串异常合法的输出:
alert('TROUBLE HERE');
alert('boy's book');
FILTER_SANITIZE_ENCODED:对输入的编码进行url编码,功能类似于urlencode。
FILTER_SANITIZE_SPECIAL_CHARS:过滤掉所有html标签
FILTER_SANITIZE_EMAIL:去掉在email地址中无效的符号,例如括号
FILTER_SANITIZE_URL:类似于FILTER_SANITIZE_EMAIL,去掉在url中无效的符号。
FILTER_SANITIZE_NUMBER_INT:类似于FILTER_VALIDATE_INT,但是他除了简单判断是否是整形以外,还将返回过已滤掉非数字字符的字符传(晕死,还是看个例子吧)
$value01 = '1你好吗23abc45%#6def';
echo filter_var($value01, FILTER_SANITIZE_NUMBER_INT);
FILTER_SANITIZE_NUMBER_FLOAT:功能目前我发现的就是同上,但是为啥既然是一样的他们两个还都同时存在呢,一个最主要的原因就是当 FILTER_SANITIZE_NUMER_FLOAT后面加了FILTER_FLAG_ALLOW_FRACTION这个参数以后就会体现不同了。(那为啥不直接就定义个可以只过滤个浮点数的参数嘞,偶也不知道

看看这个例子吧:
$value = '1.23';
echo filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
当然,避免注入还有很多其他简单又基本的方法:
例如我们还可以用:
htmlspecialchars、htmlentities、mysql_real_escape_string
或者你甚至还可以自己定义些自己需要的方法。
好啦,就写到这里吧。本文很大一部分参考了Getting Clean With PHP这篇文章,在此非常感谢之:)