- 新增「简记memo」一体化小程序产品原型设计文档 - 新增简记memo完整版UI视觉设计规范和界面细节 - 添加IDEA项目配置文件.gitignore - 创建404页面HTML文件,包含响应式布局和错误提示 - 添加关于页面HTML文件,展示品牌介绍和团队信息 - 实现AES加解密工具函数,支持请求体加密 - 添加用户协议页面基础框架
111 lines
2.5 KiB
Go
111 lines
2.5 KiB
Go
// utils/sensitive.go
|
|
// 敏感词过滤工具
|
|
package utils
|
|
|
|
import (
|
|
"embed"
|
|
"strings"
|
|
"sync"
|
|
|
|
"github.com/importcjj/sensitive"
|
|
)
|
|
|
|
//go:embed sensitive_words.txt
|
|
var sensitiveWordsFS embed.FS
|
|
|
|
var (
|
|
filter *sensitive.Filter
|
|
filterOnce sync.Once
|
|
)
|
|
|
|
// GetSensitiveFilter 获取敏感词过滤器单例
|
|
func GetSensitiveFilter() *sensitive.Filter {
|
|
filterOnce.Do(func() {
|
|
filter = sensitive.New()
|
|
loadDefaultWords()
|
|
})
|
|
return filter
|
|
}
|
|
|
|
// loadDefaultWords 加载默认敏感词库
|
|
func loadDefaultWords() {
|
|
// 从嵌入的文件系统读取
|
|
data, err := sensitiveWordsFS.ReadFile("sensitive_words.txt")
|
|
if err != nil {
|
|
// 如果文件不存在,使用内置的基础词库
|
|
loadBuiltinWords()
|
|
return
|
|
}
|
|
|
|
words := strings.Split(string(data), "\n")
|
|
for _, word := range words {
|
|
word = strings.TrimSpace(word)
|
|
if word != "" && !strings.HasPrefix(word, "#") {
|
|
filter.AddWord(word)
|
|
}
|
|
}
|
|
}
|
|
|
|
// loadBuiltinWords 加载内置基础敏感词
|
|
func loadBuiltinWords() {
|
|
// 基硎敏感词列表
|
|
builtinWords := []string{
|
|
// 政治相关
|
|
"习近平", "江泽民", "胡锦涛", "温家宝", "李克强",
|
|
"法轮功", "六四", "天安门", "台独", "藏独", "疆独",
|
|
// 色情相关
|
|
"色情", "黄色", "裸体", "做爱", "性交", "强奸", "乱伦",
|
|
// 暴力相关
|
|
"杀人", "自杀", "爆炸", "恐怖", "炸弹", "袭击",
|
|
// 赌博相关
|
|
"赌博", "赌钱", "博彩", "六合彩",
|
|
// 毒品相关
|
|
"毒品", "吸毒", "贩毒", "冰毒", "海洛因",
|
|
// 侮辱性词汇
|
|
"傻逼", "操你", "妈的", "王八蛋", "畜生",
|
|
}
|
|
|
|
for _, word := range builtinWords {
|
|
filter.AddWord(word)
|
|
}
|
|
}
|
|
|
|
// FilterSensitive 过滤敏感词,替换为 *
|
|
func FilterSensitive(text string) string {
|
|
f := GetSensitiveFilter()
|
|
return f.Replace(text, '*')
|
|
}
|
|
|
|
// ContainsSensitive 检查是否包含敏感词
|
|
func ContainsSensitive(text string) bool {
|
|
f := GetSensitiveFilter()
|
|
has, _ := f.FindIn(text)
|
|
return has
|
|
}
|
|
|
|
// FindAllSensitive 查找所有敏感词
|
|
func FindAllSensitive(text string) []string {
|
|
f := GetSensitiveFilter()
|
|
return f.FindAll(text)
|
|
}
|
|
|
|
// ValidateContent 验证内容,返回是否通过和第一个敏感词
|
|
func ValidateContent(text string) (bool, string) {
|
|
f := GetSensitiveFilter()
|
|
return f.Validate(text)
|
|
}
|
|
|
|
// AddSensitiveWord 动态添加敏感词
|
|
func AddSensitiveWord(word string) {
|
|
f := GetSensitiveFilter()
|
|
f.AddWord(word)
|
|
}
|
|
|
|
// AddSensitiveWords 批量添加敏感词
|
|
func AddSensitiveWords(words []string) {
|
|
f := GetSensitiveFilter()
|
|
for _, word := range words {
|
|
f.AddWord(word)
|
|
}
|
|
}
|