过滤与清理
最后更新于:2022-04-02 05:15:18
[TOC]
# 过滤与清理
清理用户输入是软件开发的关键部分。信任或忽略对用户输入进行清理可能导致未经授权访问应用程序的内容,主要是用户数据,甚至是托管应用程序的服务器。
![](https://docs.phalconphp.com/images/content/filter-sql.png)
[完整大图](http://xkcd.com/327)
`Phalcon\Filter` 组件提供了一组常用的过滤器和数据清理助手。它提供围绕PHP过滤器扩展的面向对象的包装器。
## 内置过滤器的类型
以下是此组件提供的内置过滤器:
| 名称 | 描述 |
| ------------- | ------------------------------------------------------------------------------------------------------------- |
| string |剥离标签并对HTML实体进行编码,包括单引号和双引号 |
| email | 删除除字母,数字和 ``!#$%&*+-/=?^_`{\|}~@.[]`` 之外的所有字符 |
| int |删除除数字,加号和减号以外的所有字符 |
| int! | 使用[intval](http://php.net/manual/en/function.intval.php)函数将值转换为整数值 |
| absint | 获取已转换为整数的值的绝对值 |
| float | 删除除数字,点,加号和减号以外的所有字符 |
| float! | 使用[floatval](http://php.net/manual/en/function.floatval.php)函数将值转换为浮点值 |
| alphanum | 删除[a-zA-Z0-9]以外的所有字符 |
| striptags | 应用[strip_tags](http://www.php.net/manual/en/function.strip-tags.php)函数 |
| special_chars | 转义'“<>&和ASCII值小于32的字符 |
| trim | 应用 [trim](http://www.php.net/manual/en/function.trim.php) 函数 |
| lower | 应用 [strtolower](http://www.php.net/manual/en/function.strtolower.php) 函数 |
| url | 删除除字母,数字和 ``|$`-_.+!*'(),{}[]<>#%";/?:@&=.^\\~`` 之外的所有字符 |
| upper | 应用 [strtoupper](http://www.php.net/manual/en/function.strtoupper.php) 函数 |
## 清理数据
清理是从值中删除特定字符的过程,用户或应用程序不需要或不需要这些字符。通过清理输入,我们确保应用程序的完整性将保持不变。
```php
sanitize('some(one)@exa\mple.com', 'email');
// Returns 'hello'
$filter->sanitize('hello<<', 'string');
// Returns '100019'
$filter->sanitize('!100a019', 'int');
// Returns '100019.01'
$filter->sanitize('!100a019.01a', 'float');
```
## 从控制器清理
访问`GET`或`POST`输入数据时(通过请求对象),您可以从控制器访问`Phalcon\Filter`对象。第一个参数是要获取的变量的名称;第二个是要应用的过滤器。
```php
request->getPost('price', 'double');
// Sanitizing email from input
$email = $this->request->getPost('customerEmail', 'email');
}
}
```
## 过滤操作参数
下一个示例显示如何清理控制器操作中的操作参数:
```php
filter->sanitize($productId, 'int');
}
}
```
## 过滤数据
除了清理之外, `Phalcon\Filter`还通过删除或修改输入数据到我们期望的格式来提供过滤。
```php
sanitize('
';