php查找/过滤一段文字中的违禁词敏感词

?php //定义编码 header( Content-Type:text/html;charset=utf-8 ); $words=array(我,你,他); $content=测一测我是不是违禁词; $banned=generateRegularExpression($words); //检查违禁词 $res_banned=check_words($banned,$content); write_html($content,$
<?php
   //定义编码 
  header( 'Content-Type:text/html;charset=utf-8 '); 
   
   $words=array('我','你','他');
   $content="测一测我是不是违禁词";
   $banned=generateRegularExpression($words);
  //检查违禁词
   $res_banned=check_words($banned,$content);
   write_html($content,$res_banned);
   
  /**
     * @describe 数组生成正则表达式
     * @param array $words
     * @return string
     */
    function generateRegularExpression($words)
    {
        $regular = implode('|', array_map('preg_quote', $words));
        return "/$regular/i";
    }
    /**
     * @describe 字符串 生成正则表达式
     * @param array $words
     * @return string
     */
    function generateRegularExpressionString($string){
          $str_arr[0]=$string;
          $str_new_arr=  array_map('preg_quote', $str_arr);
          return $str_new_arr[0];
    }
    /**
     * 检查敏感词
     * @param $banned
     * @param $string
     * @return bool|string
     */
    function check_words($banned,$string)
    {    $match_banned=array();
        //循环查出所有敏感词
 
        $new_banned=strtolower($banned);
        $i=0;
        do{
            $matches=null;
            if (!empty($new_banned) && preg_match($new_banned, $string, $matches)) {
                $isempyt=empty($matches[0]);
                if(!$isempyt){
                    $match_banned = array_merge($match_banned, $matches);
                    $matches_str=strtolower(generateRegularExpressionString($matches[0]));
                    $new_banned=str_replace("|".$matches_str."|","|",$new_banned);
                    $new_banned=str_replace("/".$matches_str."|","/",$new_banned);
                    $new_banned=str_replace("|".$matches_str."/","/",$new_banned);
                }
            }
            $i++;
            if($i>20){
                $isempyt=true;
                break;
            }
        }while(count($matches)>0 && !$isempyt);
 
        //查出敏感词
        if($match_banned){
            return $match_banned;
        }
        //没有查出敏感词
        return array();
    }
     
      /**
     * 打印到页面上
     * @param $filepath
     * @param $res_mingan
     * @param $res_banned
     */
    function write_html($content,$res_banned){
       
            print_r($content);
            if($res_banned){
                print_r("  <font color='red'>违禁词(".count($res_banned)."):</font>".implode('|',$res_banned));
            }
            echo "<br>";
        
    }

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

今天在用php进行图片保存输出时候,图片一直显示错误,后面用调试模式下提示:Warning: Cannot modify header information - headers already sent by... 看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了: o
ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行/都会有Header had all ready send by的错误,这时可以先用ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区而不会立刻输出.当然打开缓冲区的作用很多,只要
第一种方法:用php的strpos() 函数判断字符串中是否包含某字符串的方法 if(strpos(www.genban.org,genban) !== false){ echo 包含genban; }else{ echo 不包含genban; } 第二种 使用了explode 用explode进行判断PHP判断字符串的包含代码如下: ?php $name = 00
/u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字) /i 表示不区分大小写(如果表达式里面有 a, 那么 A 也是匹配对象) /s 表示将字符串视为单行来匹配
随机生成难点是在于如何避免碰撞,有人说用md5,GUID这些机制啊,当然可以,但是做为账号,看着有乱,而且生成位数也过长。 本方法只需要解决1秒内的并发碰撞就可以,因为固定头部采用的是unixtime时间,精确到秒,超过1秒,这个头部的时间肯定变化了。同时
文实例讲述了PHP页面实现定时跳转的方法,分享给大家供大家参考。具体实现方法如下: php定时跳转我们需要利用header函数输入html或js代码来实现定时跳转,下面我来介绍一个简单的例子 php代码如下: header(refresh:3;url=https://www.genban.org);print(正