在Web开发中,数据过滤是十分重要的,它可以提高应用程序的安全性和健壮性,帮助开发者预防潜在的攻击以及应对意外的输入。
PHP提供了很多种数据过滤的方法,比如正则表达式、自定义函数等,但是其中最常用的方法之一是使用内置函数filter_var()。
filter_var()函数可以对传入的变量进行过滤,返回合法的或标准化的数据,或者将它们转化为另一个值,可以用于验证、过滤和转换数据,有效避免了SQL注入以及其他攻击手段的存在。接下来我们将详细介绍filter_var()函数的用法。
1. 基本用法
filter_var()函数的用法非常简单,它接受两个参数,要过滤的变量以及一个过滤器,示例代码如下:
$var = 'bob@example.com'; if (filter_var($var, FILTER_VALIDATE_EMAIL)) { echo("$var is a valid email address"); } else { echo("$var is not a valid email address"); }
在上面的例子中,我们用FILTER_VALIDATE_EMAIL过滤器验证了$var是否是一个合法的邮件地址,如果是打印它是一个合法的邮件地址,否则打印它不是一个合法的邮件地址。可以将其它的类似过滤器用于验证其他数据类型,包括URL,整型,非负数。
2. 过滤器类型
filter_var()函数提供了很多种过滤器类型,具体如下:
FILTER_VALIDATE_BOOLEAN:验证一个布尔类型的变量是否是true或false,成功返回true或false,失败返回false。
FILTER_VALIDATE_EMAIL:验证一个字符串是否为有效的电子邮件地址。
FILTER_VALIDATE_FLOAT:验证一个浮点型变量是否是一个浮点数,成功返回浮点数,失败返回false。
FILTER_VALIDATE_INT:验证一个整型变量是否是一个整数,成功返回整数,失败返回false。
FILTER_VALIDATE_IP:验证一个字符串是否是有效的IP地址。
FILTER_VALIDATE_REGEXP:验证一个字符串是否在一个正则表达式规定的范围内。
FILTER_VALIDATE_URL:验证一个字符串是否是有效的URL地址。
FILTER_SANITIZE_EMAIL:删除邮件地址中的非法字符。
FILTER_SANITIZE_ENCODED:将字符串中的特殊字符转换为HTML实体。
FILTER_SANITIZE_MAGIC_QUOTES:删除字符串中的魔术引号。
FILTER_SANITIZE_NUMBER_FLOAT:删除数字中的所有非数字字符。
FILTER_SANITIZE_NUMBER_INT:删除数字中的所有非数字字符,但保留+、-、.字符。
FILTER_SANITIZE_SPECIAL_CHARS:将字符串中的<>符号转换为对应的实体。
FILTER_SANITIZE_STRING:删除字符串中的标签和HTML符号。
FILTER_SANITIZE_URL:删除URL中的非法字符。
3. 过滤选项
除了上面列举的过滤器类型之外,filter_var()还提供了许多选项来对数据进行更细粒度的过滤控制。
一个选项由一对选项名称和选项值组成,多个选项使用数组的形式传递。下面是一些常见选项:
FILTER_FLAG_ALLOW_FRACTION:允许浮点数的小数部分。默认只允许整数。
FILTER_FLAG_ALLOW_THOUSAND:允许使用逗号将数字分组,比如1,000。
FILTER_FLAG_EMAIL_UNICODE:允许电子邮件地址使用Unicode字符。
FILTER_FLAG_STRIP_HIGH:删除所有非ASCII字符,即所有高8位字符。
FILTER_FLAG_STRIP_LOW:删除所有高于ASCII 127的字符。
FILTER_FLAG_STRIP_BACKTICK:删除反引号字符。
FILTER_FLAG_ENCODE_LOW:将所有ASCII 32以下的字符转换为%XX形式。
FILTER_FLAG_ENCODE_HIGH:将所有ASCII 127以上的字符转换为%XX形式。
4. 实际情况
下面是具体的一个例子:
$email = $_POST['email']; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "无效的email格式"; } else { echo "email格式正确"; }
假设前端通过POST表单传递了一个email参数,我们可以直接使用filter_var()函数验证email是否合法。如果不合法,我们可以选择将其删除,或者拒绝访问等处理。
5. 总结
filter_var()函数是PHP中用于数据过滤和校验的重要函数之一。它可以有效地避免一些常见的安全问题,包括SQL注入、XSS等,并利用多样性的过滤器和选项,快速准确地过滤出我们需要的数据。在PHP中,可以通过使用filter_var()函数来增强程序的健壮性。