在对用户输入数据进行过滤时通常都是自己写方法进行判断
比如验证邮箱的时候使用正则表达式
- $pattern = "/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/";
- if (!preg_match($pattern, $email)) {
- throw new \Exception(self::ERROR_PARAMETER_EMPTY . '_邮件格式有误:' . $email);
- }
如果不用正则还有其它跟简单的方法吗?
使用 filter 相关函数
filter_has_var(type, variable) 是否存在指定类型的变量.
filter_input 从脚本外部获取输入, 并进行过滤.
filter_input_array 从脚本外部获取多项输入, 并进行过滤.
filter_var 获取一个变量, 并进行过滤.
filter_var_array 获取多项变量, 并进行过滤.
filter_has_var
判断 $_GET 的结果是否包含 name
- if(!filter_has_var(INPUT_GET, "name"))
- {
- echo("name 不存在");
- }
- else
- {
- echo("name 存在");
- }
- filter_input
看一个验证邮箱的例子
- if (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL))
- {
- echo "E-Mail is not valid";
- }
- else
- {
- echo "E-Mail is valid";
- }
- filter_input_array
对整个 input 源进行过滤
- $filters = array
- (
- "name" => array
- (
- "filter"=>FILTER_CALLBACK,
- "flags"=>FILTER_FORCE_ARRAY,
- "options"=>"ucwords"
- ),
- "age" => array
- (
- "filter"=>FILTER_VALIDATE_INT,
- "options"=>array
- (
- "min_range"=>1,
- "max_range"=>120
- )
- ),
- "email"=> FILTER_VALIDATE_EMAIL,
- );
- print_r(filter_input_array(INPUT_POST, $filters));
- filter_var,filter_var_array
不需要 input 源, 直接对值进行过滤
- if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL))
- {
- echo("E-mail is not valid");
- }
- else
- {
- echo("E-mail is valid");
- }
input 源的范围
验证
其它过滤方法
strip_tags 删除 html 标签
htmlentities 把字符转换为 HTML 实体,(还会把货币表示符号欧元英镑等, 版权符号等转义)
htmlspecialchars 函数把预定义的字符转换为 HTML 实体.
预定义的字符是:
& (和号) 成为 &
- "(双引号) 成为"
- '(单引号) 成为'
<(小于) 成为 <
(大于) 成为 >
*** 提示: 如需把特殊的 HTML 实体转换回字符, 请使用 htmlspecialcharsdecode() 函数.
- $input = "<span > 我是标题 </span>";
- echo htmlspecialchars($input) . "\n";
- echo htmlentities($input) . "\n";
- echo strip_tags($input) . "\n";
- $input = "--'select * from ";
- echo addslashes($input) . "\n";
来源: http://www.bubuko.com/infodetail-2864502.html