PHP Filter函数过滤参数

经常我们需要判断从客户端过来信息的正确性,大多数都是使用正则表达式判断。 但PHP本身已经给我们提供一些判断不同类型数据的方法,而使用PHP的过滤函数会事半功倍并使我们的代码更加地优美。

PHP Filter 简介

PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。 filter 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

FILTER_CALLBACK 过滤器

定义和用法 FILTER_CALLBACK 过滤器使用用户自定义函数对值进行过滤。 这个过滤器为我们提供了对数据过滤的完全控制。 指定的函数必须存入名为 "options" 的关联数组中。可以创建自己的函数,或者使用已有的 PHP 函数。 注意:该过滤器与FILTER_SANITIZE_STRIPPED相同。 请参见下面的例子。
/*调用自定义函数过滤*/
function convertSpace($string)
{
  return str_replace(" ", "_", $string);
}
$string = "Peter is a great guy!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
//output: Peter_is_a_great_guy!

/*调用PHP已有函数*/
$string="Peter is a great guy!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"strtoupper"));
//output: PETER IS A GREAT GUY!

FILTER_SANITIZE_STRING 过滤器

定义和用法 FILTER_SANITIZE_STRING 过滤器去除或编码不需要的字符。 这个过滤器删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符。 可能的选项或标志:
  • FILTER_FLAG_NO_ENCODE_QUOTES - 该标志不编码引号
  • FILTER_FLAG_STRIP_LOW - 去除 ASCII 值在 32 以下的字符
  • FILTER_FLAG_STRIP_HIGH - 去除 ASCII 值在 32 以上的字符
  • FILTER_FLAG_ENCODE_LOW - 编码 ASCII 值在 32 以下的字符
  • FILTER_FLAG_ENCODE_HIGH - 编码 ASCII 值在 32 以上的字符
  • FILTER_FLAG_ENCODE_AMP - 把 & 字符编码为 &
示例:
$var="Bill Gates";
var_dump(filter_var($var, FILTER_SANITIZE_STRING));
//output: string(13) "Bill Gates"

FILTER_SANITIZE_ENCODED 过滤器

定义和用法 FILTER_SANITIZE_ENCODED 过滤器去除或 URL 编码不需要的字符。 该函数与 urlencode() 函数很类似。 可能的选项或标志:
  • FILTER_FLAG_STRIP_LOW - 去除 ASCII 值在 32 以下的字符
  • FILTER_FLAG_STRIP_HIGH - 去除 ASCII 值在 32 以上的字符
  • FILTER_FLAG_ENCODE_LOW - 编码 ASCII 值在 32 以下的字符
  • FILTER_FLAG_ENCODE_HIGH - 编码 ASCII 值在 32 以上的字符
示例:
$url="http://www.sakmon.com";
var_dump(filter_var($url,FILTER_SANITIZE_ENCODED));
//output: string(27) "http%3A%2F%2Fwww.sakmon.com"

FILTER_SANITIZE_SPECIAL_CHARS 过滤器

定义和用法 FILTER_SANITIZE_SPECIAL_CHARS 过滤器对特殊字符进行 HTML 转义。 该过滤器用于对 "<>& 以及 ASCII 值在 32 值以下的字符进行转义。 可能的选项或标志:
  • FILTER_FLAG_STRIP_LOW - 去除 ASCII 值在 32 以下的字符
  • FILTER_FLAG_STRIP_HIGH - 去除 ASCII 值在 32 以上的字符
  • FILTER_FLAG_ENCODE_HIGH - 编码 ASCII 值在 32 以上的字符
示例:
$url="Is Peter  & funny?";
var_dump(filter_var($url,FILTER_SANITIZE_SPECIAL_CHARS));
//output: string(37) "Is Peter  & funny?"
//如果您在浏览器中查看源代码,会看到以下 HTML:
//string(37) "Is Peter <smart> & funny?"

FILTER_SANITIZE_EMAIL 过滤器

定义和用法 FILTER_SANITIZE_EMAIL 过滤器删除字符串中所有非法的 e-mail 字符。 该过滤器允许所有的字符、数字以及 $-_.+!*'{}|^~[]`#%/?@&=。 示例:
$var="some(one)@exa\\mple.com";
var_dump(filter_var($var, FILTER_SANITIZE_EMAIL));
//output: string(19) "someone@example.com"

FILTER_SANITIZE_URL 过滤器

定义和用法 FILTER_SANITIZE_URL 过滤器删除字符串中所有非法的 URL 字符。 该过滤器允许所有的字符、数字以及 $-_.+!*'(),{}|\\^~[]`"><#%;/?:@&=。 示例:
$var="http://www.sakmonêèél.coêèém";
var_dump(filter_var($var, FILTER_SANITIZE_URL));
//output: string(22) "http://www.sakmon.com"

FILTER_SANITIZE_NUMBER_INT 过滤器

定义和用法 FILTER_SANITIZE_NUMBER_INT 过滤器删除数字中所有非法的字符。 该过滤器允许所有数字以及 +-。 示例:
$number="5-2+3pp";
var_dump(filter_var($number,FILTER_SANITIZE_NUMBER_INT));
//output: string(5) "5-2+3"

FILTER_SANITIZE_NUMBER_FLOAT 过滤器

定义和用法 FILTER_SANITIZE_NUMBER_FLOAT 过滤器删除浮点数中所有非法的字符。 该过滤器默认允许所有数字以及 +-。 示例:
$number="5-2f+3.3pp";
var_dump(filter_var($number,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION));
//output: string(7) "5-2+3.3"

FILTER_SANITIZE_NUMBER_FLOAT 过滤器

定义和用法 FILTER_SANITIZE_MAGIC_QUOTES 过滤器对字符串执行 addslashes() 函数。 该过滤器在预定义的字符串前面设置反斜杠。 预定义字符是:
  • single quote (')
  • double quote (")
  • backslash (\)
  • NULL
示例:
$var="Peter's here!";
var_dump(filter_var($var,FILTER_SANITIZE_MAGIC_QUOTES));
//output: string(14) "Peter\'s here!"

FILTER_UNSAFE_RAW 过滤器

定义和用法 FILTER_UNSAFE_RAW 过滤器不进行任何过滤,去除或编码特殊字符。 这个过滤器删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符。 如果不规定标志,则该过滤器没有任何行为。 可能的选项或标志:
  • FILTER_FLAG_STRIP_LOW - 去除 ASCII 值在 32 以下的字符
  • FILTER_FLAG_STRIP_HIGH - 去除 ASCII 值在 32 以上的字符
  • FILTER_FLAG_ENCODE_LOW - 编码 ASCII 值在 32 以下的字符
  • FILTER_FLAG_ENCODE_HIGH - 编码 ASCII 值在 32 以上的字符
  • FILTER_FLAG_ENCODE_AMP - 把 & 字符编码为 &amp;

FILTER_VALIDATE_INT 过滤器

定义和用法 FILTER_VALIDATE_INT 过滤器以整数验证值。 可能的选项或标志:
  • min_range - 规定最小整数值
  • max_range - 规定最大整数值
  • FILTER_FLAG_ALLOW_OCTAL - 允许八进制数值
  • FILTER_FLAG_ALLOW_HEX - 允许十六进制数值
示例:
$var=300;
$int_options = array("options"=>
array("min_range"=>0, "max_range"=>256));
var_dump(filter_var($var, FILTER_VALIDATE_INT, $int_options));
//output: bool(false)

FILTER_VALIDATE_BOOLEAN 过滤器

定义和用法 FILTER_VALIDATE_BOOLEAN 过滤器把值作为布尔选项来验证。 可能的返回值:
  • 如果是 "1", "true", "on" 以及 "yes",则返回 true。
  • 如果是 "0", "false", "off", "no" 以及 "",则返回 false。
  • 否则返回 NULL。
示例:
$var="yes";
var_dump(filter_var($var, FILTER_VALIDATE_BOOLEAN));
//output: bool(true)

FILTER_VALIDATE_FLOAT 过滤器

定义和用法 FILTER_VALIDATE_FLOAT 过滤器把值作为浮点数来验证。 示例:
$var=12.3;
var_dump(filter_var($var, FILTER_VALIDATE_FLOAT));
//output: float(12.3)

FILTER_VALIDATE_REGEXP 过滤器

定义和用法 FILTER_VALIDATE_REGEXP 过滤器根据兼容 Perl 的正则表达式来验证值。 可能的选项:
  • regexp - 验证所依据的正则表达式
示例:
$string = "Match this string";
var_dump(filter_var($string, FILTER_VALIDATE_REGEXP, 
array("options"=>array("regexp"=>"/^M(.*)/"))))
//output: string(17) "Match this string"

FILTER_VALIDATE_URL 过滤器

定义和用法 FILTER_VALIDATE_URL 过滤器把值作为 URL 进行验证。 可能的标志:
  • FILTER_FLAG_SCHEME_REQUIRED - 要求 URL 是 RFC 兼容 URL。(比如:http://example)
  • FILTER_FLAG_HOST_REQUIRED - 要求 URL 包含主机名(http://www.example.com)
  • FILTER_FLAG_PATH_REQUIRED - 要求 URL 在主机名后存在路径(比如:eg.com/example1/)
  • FILTER_FLAG_QUERY_REQUIRED - 要求 URL 存在查询字符串(比如:"eg.php?age=37")
示例1:
$url = "http://www.example.com";

if(!filter_var($url, FILTER_VALIDATE_URL))
 {
 echo "URL is not valid";
 }
else
 {
 echo "URL is valid";
 }
//output: URL is valid
示例2:
$url = "example.php?name=Peter&age=37";

if(!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED))
{
echo "URL is not valid";
}
else
{
echo "URL is valid";
}
//output: URL is valid

FILTER_VALIDATE_EMAIL 过滤器

定义和用法 FILTER_VALIDATE_EMAIL 过滤器把值作为电子邮件地址来验证。 示例:
$email = "someone@exa mple.com";

if(!filter_var($email, FILTER_VALIDATE_EMAIL))
 {
 echo "E-mail is not valid";
 }
else
 {
 echo "E-mail is valid";
 }
//output: E-mail is not valid

FILTER_VALIDATE_IP 过滤器

定义和用法 FILTER_VALIDATE_IP 过滤器把值作为 IP 进行验证。 可能的标志:
  • FILTER_FLAG_IPV4 - 要求值是合法的 IPv4 IP(比如 255.255.255.255)
  • FILTER_FLAG_IPV6 - 要求值是合法的 IPv6 IP(比如 2001:0db8:85a3:08d3:1319:8a2e:0370:7334)
  • FILTER_FLAG_NO_PRIV_RANGE - 要求值是 RFC 指定的私域 IP (比如 192.168.0.1)
  • FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 范围内。该标志接受 IPV4 和 IPV6 值。
示例1:
$ip = "192.168.0.1";

if(!filter_var($ip, FILTER_VALIDATE_IP))
 {
 echo "IP is not valid";
 }
else
 {
 echo "IP is valid";
 }
//output: IP is valid
示例2:
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";

if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
 {
 echo "IP is not valid";
 }
else
 {
 echo "IP is valid";
 }
//output: IP is valid

转载于:https://my.oschina.net/sakmon/blog/393940

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值