首先是要建立一个敏感词汇的table
1 CREATE TABLE `censor_word` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `name` varchar(128) DEFAULT NULL COMMENT 'forbid string', 4 `valid_for_username` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'check if it can be valid for user name', 5 `valid_for_userinput` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'check if it can be valid for user input content', 6 `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'creation time', 7 PRIMARY KEY (`id`), 8 UNIQUE KEY `name` (`name`), 9 KEY `valid_for_username` (`valid_for_username`), 10 KEY `valid_for_userinput` (`valid_for_userinput`) 11 ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
frontend post过来数据之后, 如果数据类型多样 那么就拼成一个string
使用mysql locate去check这个长string
1 $post = "违禁词汇string"; 2 $query = "SELECT name FROM censor_word WHERE valid_for_userinput = 0 AND LOCATE(name, ".$db->quote($post).")>0"; 3 $db->setQuery($query); 4 $result = $db->loadRowList();
获取到的数组就是table中name和string里有match到的name(敏感单词).
再将此数组打成string, 传送给frontend, 提示给用户.
---- 之前使用过别的系统的敏感词过滤, 用户提交后系统提示提交内容中含有敏感词, 但是未提示具体是哪些. 用户就很困惑啦 想去改掉都要一个个的去仔细检查.
按照这样的方法. 就更友善了.
PS
表中有valid_for_name 和 valid_for_userinput 两个字段用于管理敏感词库, 使得不同类型的数据, 可以得到分类的处理, 更加方便.
有时间的时候会把如何检测词组中的敏感词是否有效的方法共享出来.