不败君

前端萌新&初级后端攻城狮

使用原生PHP写一个敏感词检测过滤接口

使用原生PHP写一个敏感词检测过滤接口

2019-08-28 11:53:54

围观(4724)

博客或者论坛及各种 APP 都会用到评论/发布功能。为避免被恶意用于发布不友好内容,所以就需要检测敏感词或者过滤敏感词。

检测过滤敏感词,需要先有一个敏感词库,当然你也可以使用阿里云或其他 IDC 提供的敏感词接口(就不用自己写接口,没下面这些事了)

敏感词库因为太敏感了,所以就不提供了。如果真的需要可以在本文下方评论联系方式。 Tips:词库在 Github 上也有很多。


当然也可以自己创造词库,先创建一个文档 后缀名为.txt 的。然后将敏感词写入,一行一个敏感词。

比如这样

我日
暴力
卧槽

保存好之后就可以使用下面这段代码引入该文件,一个检测过滤敏感词的接口就好了。

比如创建个 api.php 写入代码并配好环境:

<?php
header('Content-type: text/json');

$content = isset($_POST['content']) ? $_POST['content'] : null;
if(!$content){
	return_json(301, '请提交需要检测的内容');
}

if($res = check_content($content)){
	if(isset($_POST['method']) && $_POST['method'] == 1){
		//过滤敏感词
		$content = str_replace($res, '*', $content);
		return_json(201, '检测到敏感词:' . $res, $content);
	}
	return_json(201, '检测到敏感词:' . $res);
}
return_json(200, '没有检测到敏感词');

function check_content($content)
{
	$file = 'words.txt';
	//上面这个就是词库文件路径
	$sensitive_array = array_map('rtrim', file($file));
	foreach ($sensitive_array as $key => $value) {
		if ($value == ''){
			continue;
		}
		if (mb_strpos($content, $value) != false){
			return $value;
			//return true;
	    }
	}
	return false;
}

function return_json($code, $msg, $data = ''){
	exit(json_encode([
		'code' => $code,
		'msg' => $msg,
		'data' => $data,
	]));
}
?>

接口提交方式: POST

所需参数: content(必须), method(可选)(值为1)

返回参数: code => 数据正常无敏感词返回 200, 数据存在敏感词返回 201, 没有提交需要检测的内容返回 301

msg => 返回提示 + 敏感词, 无敏感词则返回提示

data => 当接口请求时携带 method 参数且值为 1 时,返回过滤好的内容。(无敏感内容或不携带 method 参数时,该参数返回的结果均为空)


以下是使用 Postman 测试的结果

检测内容存在敏感词,但不携带 method 参数:

mingan_1.png

检测内容存在敏感词,携带 method 且值为 1:

mingan_2.png

检测无敏感内容:

mingan_3.png

本文地址 : bubaijun.com/page.php?id=133

版权声明 : 未经允许禁止转载!

评论:我要评论

linlinzzo 沙发

求词库

评论时间:2021-02-05 11:23:13

回复

不败君 板凳

@linlinzzo https://gitee.com/ailir/tools/tree/master/ https://gitee.com/fastjee/sensitive-words 敏感词内容真的很敏感,不敢放博客上😂 这里有两个地址你进去就有词库了。

评论时间:2021-02-05 11:30:53

回复

Clancy

@不败君 这两个gitee的仓库都被ban了。。。 GitHub上有不少,建议通过base64转码后再部署

评论时间:2023-05-28 10:00:33

回复

Clancy

@不败君 500星,腾讯离线库:/cjh0613/tencent-sensitive-words 900星,16年老库:/fwwdn/sensitive-stop-words 1.9k星,21年1w词库:/observerss/textfilter 免责声明:资源来自网络,仅用于学习交流,请勿用于非法用途!

评论时间:2023-05-28 10:01:17

回复

不败君

@Clancy 谢谢老哥找的资源 👍

评论时间:2023-05-28 15:01:52

回复

发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语