php实现敏感词过滤

中国特色的网络环境必须考虑敏感词的问题,本人最近在工作中在实现一个论坛的发帖模块的时候也遇到了这个问题。本来想通过原生的正则表达式来处理,但是考虑到php本身的正则函数已经能够很好的做到了,则自己尝试利于它实现了一个敏感词过滤的封装。主要思想是将文本中的敏感词替换为‘*’。

首先得有个文本文件,用于替换规则,每行是一个替换规则:

名称为filter.txt,其规则为将文本中等号左边的字符串替换为右边的字符串

filter.txt

敏感词=***
过滤=***
...
<?php
/**
 *   文本中的非法字符过滤类 
 */
class Filter{
	private $pattern;
	private $replacement;
	/**
	 * 构造函数,进行初始化工作,加载替换规则,并构造用于模式查找和模式替换的两个数组
	 */
	public function __construct(){
		$f= fopen("filter.txt","r");
		if(!$f){
			die("open filter file failed!");
		}
		while (!feof($f))
		{
			$line = fgets($f);//从过滤规则文件中读取一行记录
			$patternandreplace = explode('=', $line); //用等号分割,前面的用作模式串,后面的用作替换串
			$this->pattern[] = '/'.$patternandreplace[0].'/';
			$this->replacement[] = trim($patternandreplace[1]);
		}
		fclose($f);
		
	}
	/**
	 * 去除$source中的敏感字符,用*替换
	 * @param unknown_type $source
	 */
	public function clean($source){
		return preg_replace($this->pattern,$this->replacement,$source);
	}
};

用法为实例化一个Filter对象,然后调用clean方法即可。

希望可以帮到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值