在文本列上进行某种过滤的最佳方法是什么?

时间:2014-12-17 06:19:22

标签: php validation yii input-filtering

我希望在我的应用程序的所有文本字段上都有一些过滤器,以了解某个字段是否包含一些不良内容,例如过滤掉用户的不良口碑。

我想过某些方法

  • 我可以preg_replace()超过php://input流,并替换不良内容
  • 我可以编写一个自定义过滤器,并将其放在每个模型中的每个字段中,这是一个很好的,我真的不想去那里
  • 我可以覆盖yii的默认sting验证器(我不知道怎么做......)

我想以动态的方式做到这一点,并且不想写很多规则

对于我的情况(来自上方或任何其他方式),最佳解决方案是什么?

更新:我正在寻找一种方法来替换用户输入中的诅咒和咒骂,并将其替换为其他内容

2 个答案:

答案 0 :(得分:1)

希望这就是你所要求的

您想要删除

  • Scripts在菲尔兹
  • 中 字段中的
  • Tags

您可以使用Yii Input Extension。它会从用户的数据中删除不需要的数据。

你有两种方法可以做到这一点

  • 对于控制器中的每个表单
  • 适用于config/main.php
  • 中全局应用中的所有表单

如果全局完成,并且当您使用某些CKEditortinyeditor时,您将无法获得所需的html发布。但是你有方法来获得它们

修改

您的情况是删除用户输入中不需要的字词

所以

protected function beforeAction($action) {
    //Write your logic here with the posted variables.
    return parent::beforeAction($action);
}

这可以在所有控制器中完成一次(确定这样可行)。

(未经审查)另一种方法是将它放在父控制器Controller

答案 1 :(得分:1)

如果您的列超过模型,您可以使用以下内容:

public function rules()
{
    $purifier = getHtmlPurifier();
    return array(
        array('column', 'filter', 'filter' => array($obj = $purifier, 'purify')),
    );
}

如果您不想使用htmlPurifier,可以通过创建函数在任何其他类型上创建过滤器。