PHP实现内容敏感词检测功能

近期跟一些朋友在讨论到网站内容遇到违规、敏感词汇等情况下怎么处理等问题,特别是DISCUZ!、phpwind等论坛站点的内容繁杂、用户数量大的时候帖子内容的不可控等问题,通过内置功能可以阻挡违规内容的发布,但是怎么让发布者知道他发布的内容中含有哪些违禁词这个又要怎么实现呢?

实现思路

首先,设定敏感词词汇集,通过表单提交post的方式,将帖子内容作为data变量发送给PHP验证文件,PHP验证完毕返回验证结果,通过javascript的alert提醒输出文字。

其中,
一,要解决如何将敏感词文字作为变量集存储给PHP文件;
二,如何解决前端输入内容发送给验证程序;
三,如何解决验证后帖子草稿内容不丢失。

jiaoyancihui0

初步解决的思路是:
一,$keyword = array ('敏感词一','敏感词二' );将敏感词汇作为数组元素;
二,form表单的POST可以将内容作为$_POST[content]变量输出;
三,javascript的history.back();可简单实现帖子内容返回后不丢失。

HTML代码

<form action="abstract.php" method="post" enctype="multipart/form-data">  
<textarea name="content" rows="12" cols="80"></textarea>  
<br>   
<input name="checksubmit" type="submit">  
</form>

PHP代码

<?php function transgress_keyword($content){                  //定义处理违法关键字的方法    
    $keyword = array ('敏感词一','敏感词二' ); //定义敏感词      
    $m = 0;    
    for($i = 0; $i < count ( $keyword ); $i ++) {    //根据数组元素数量执行for循环    
        //应用substr_count检测文章的标题和内容中是否包含敏感词    
        if (substr_count ( $content, $keyword [$i] ) > 0) {    
            $m ++;    
        }    
    }    
    return $m;              //返回变量值,根据变量值判断是否存在敏感词   
}    
?>  

这里插入上述的HTML代码;  

<?php  
if (transgress_keyword($_POST[content])> 0 ) {    //判断返回值大于0说明包含敏感词    
    echo "<script>alert('您输入的内容中含有敏感词:【";  
    $keyword = array ('敏感词一','敏感词二' ); //定义敏感词      
    $content = $_POST[content];  
        for($i = 0; $i < count ( $keyword ); $i ++) {  
        if (substr_count ( $content, $keyword [$i] ) > 0) {    
              echo $keyword [$i];   
              echo " ";  
        }    
    }    
    echo "】,请修改后再发表'); history.back();</script>";    
}    
?>

jiaoyancihui

待改进部分

这段代码仅仅是完成了特别简单的敏感词汇检测功能,对于大量词汇的校验和引入txt文件进行校验,我还没有做到比较完善的功能,总是有大大小小的问题,希望朋友们对PHP有应用过的能够给碎碎念指点一下,如果完成这一步,这个校验功能将可以应用到非常多的地方去,不仅仅是词汇校验的功能了。

写得好!朕重重有赏!