|
@@ -0,0 +1,59 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace app\common\library;
|
|
|
+
|
|
|
+use think\Hook;
|
|
|
+use think\Config;
|
|
|
+/**
|
|
|
+ * 关键词检索类
|
|
|
+ */
|
|
|
+class Keyworld
|
|
|
+{
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @todo 敏感词过滤,返回结果
|
|
|
+ * @param array $list 定义敏感词一维数组
|
|
|
+ * @param string $string 要过滤的内容
|
|
|
+ * @return string $log 处理结果
|
|
|
+ */
|
|
|
+ public static function sensitive($string){
|
|
|
+ $count = 0; //违规词的个数
|
|
|
+ $sensitiveWord = ''; //违规词
|
|
|
+ $stringAfter = $string; //替换后的内容
|
|
|
+ $list = config('keyworld'); //定义敏感词数组
|
|
|
+
|
|
|
+ $pattern = "/".implode("|",$list)."/i"; //定义正则表达式
|
|
|
+ if(preg_match_all($pattern, $string, $matches)){ //匹配到了结果
|
|
|
+ $patternList = $matches[0]; //匹配到的数组
|
|
|
+ $count = count($patternList);
|
|
|
+ //$sensitiveWord = implode(',', $patternList); //敏感词数组转字符串
|
|
|
+
|
|
|
+ //$replaceArray = array_combine($patternList,array_fill(0,count($patternList),'*')); //把匹配到的数组进行合并,替换使用
|
|
|
+ $replace_arr = [1=>'*',2=>'**',3=>'***',4=>'****',5=>'*****','more'=>'*****...',];
|
|
|
+ $replaceArray = [];
|
|
|
+ foreach($patternList as $key => $val){
|
|
|
+ $replaceArray[$val] = isset($replace_arr[mb_strlen($val)]) ? $replace_arr[mb_strlen($val)] : $replace_arr['more'];
|
|
|
+ }
|
|
|
+ $stringAfter = strtr($string, $replaceArray); //结果替换
|
|
|
+ }
|
|
|
+
|
|
|
+ /*$rs = [];
|
|
|
+ $rs['string'] = $string;
|
|
|
+ $rs['count'] = $count;
|
|
|
+ $rs['keyworld'] = $patternList;
|
|
|
+ $rs['newstring'] = $stringAfter;*/
|
|
|
+
|
|
|
+ return $stringAfter;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function checkAction($data,$fields){
|
|
|
+ //$string = 'likeyou小白喜欢小黑爱着的大黄'; //要过滤的内容
|
|
|
+ foreach($data as $key => $string){
|
|
|
+ if(in_array($key,$fields)){
|
|
|
+ $data[$key] = self::sensitive($string);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+}
|