敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术,用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中,往往需要担心某些用户发布的内容中包含敏感词汇,这些词汇往往会导致我们的网站被用户举报,甚至被服务器运营商封禁、被相关部门约谈、罚款等。为了防止这种情况发生,我们需要对敏感词汇进行过滤。敏感词过滤的实现涉及多个步骤,既包括技术实现,也包括策略制定
敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术,用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中,往往需要担心某些用户发布的内容中包含敏感词汇,这些词汇往往会导致我们的网站被用户举报,甚至被服务器运营商封禁、被相关部门约谈、罚款等。为了防止这种情况发生,我们需要对敏感词汇进行过滤。
敏感词过滤的实现涉及多个步骤,既包括技术实现,也包括策略制定。以下以安企CMS的敏感词过滤设计为例,展开说明。

func ReplaceSensitiveWords(content []byte, sensitiveWords []string) []byte {
// 如果敏感词库为空,或内容为空,直接返回
if len(sensitiveWords) == 0 || len(content) == 0 {
return content
}
// 顶一个结构体,用于存储替换结果
type replaceType struct {
Key []byte
Value []byte
}
var replacedMatch []*replaceType
numCount := 0
//忽略所有html标签的属性,这是为了防止将标签属性替换成为*,导致页面出错
reg, _ := regexp.Compile("(?i)<!?/?[a-z0-9-]+(\\s+[^>]+)?>")
content = reg.ReplaceAllFunc(content, func(s []byte) []byte {
key := []byte(fmt.Sprintf("{$%d}", numCount))
replacedMatch = append(replacedMatch, &replaceType{
Key: key,
Value: s,
})
numCount++
return key
})
// 替换所有敏感词为星号
for _, word := range sensitiveWords {
if len(word) == 0 {
continue
}
if bytes.Contains(content, []byte(word)) {
content = bytes.ReplaceAll(content, []byte(word), bytes.Repeat([]byte("*"), utf8.RuneCountInString(word)))
} else {
// 支持正则表达式替换,定义正则表达式以{开头}结束,如:{[1-9]\d{4,10}}
if strings.HasPrefix(word, "{") && strings.HasSuffix(word, "}") && len(word) > 2 {
// 移除首尾花括号
newWord := word[1 : len(word)-1]
re, err := regexp.Compile(newWord)
if err == nil {
content = re.ReplaceAll(content, bytes.Repeat([]byte("*"), utf8.RuneCountInString(word)))
}
continue
}
}
}
// 将上面忽略的html标签属性还原回来
for i := len(replacedMatch) - 1; i >= 0; i-- {
content = bytes.Replace(content, replacedMatch[i].Key, replacedMatch[i].Value, 1)
}
return content
}func (s *DjangoEngine) ExecuteWriter(w io.Writer, filename string, _ string, bindingData interface{}) error {
// 如果开启了debug模式,每次渲染的时候,重新解析模板。
if s.reload {
if err := s.LoadStart(true); err != nil {
return err
}
}
ctx := w.(iris.Context)
currentSite := provider.CurrentSite(ctx)
if tmpl := s.fromCache(currentSite.Id, filename); tmpl != nil {
data, err := tmpl.ExecuteBytes(getPongoContext(bindingData))
if err != nil {
return err
}
// 对data进行敏感词替换
data = currentSite.ReplaceSensitiveWords(data)
buf := bytes.NewBuffer(data)
_, err = buf.WriteTo(w)
return err
}
// 如果模板不存在,返回错误
return view2.ErrNotExist{Name: filename, IsLayout: false, Data: bindingData}
}
以上的敏感词过滤的思路和实践。在实际使用过程中,我们应该根据实际需求进行优化和调整。在机器自动过滤的基础上,增加人工审核部分内容,定期巡查,特别是那些容易产生歧义或涉及深度语义分析的内容。
敏感词过滤是一个复杂且动态的过程,既需要高效的技术手段,也需要灵活应变的策略以适应不断变化的语言环境和政策要求。希望以上内容能帮助到您。
添加站点 在“站点管理中”,添加安企CMS站点,在选择站点类型弹出界面中,选择“安企CMS”。 填写网站名称,如:我的安企站点;填写网站地址,如:http://www.mycms.com ; 填写通信Token,Token从安企站点后台 -> 功能管理 -> 内容导入接口 功能中获取。 选择发布站点 来到 Txt 文章发布界面,在左侧点击添加站点按钮,选择要发布的站点
虽然说现在还在使用网站留言以及表单收集功能的网站不多,但还是有一小部分用户依然在使用。有没有想过当网站收到新留言后,或者有用户提交新的表单信息后,希望程序自动将它们发送到我们的QQ邮箱呢?说实话,很多人做不到经常登录网站后台,但QQ、微信确是时时刻刻都在线,当有新的邮件到达的时候,可以及时收到邮件信息。如果可以将网站留言和表单信息及时发送到邮箱中,那就不怕错过什么客户的信息了。
要在安企CMS的模板中显示当前时间,可以使用 now 标签。now 标签允许你根据 Go 语言的时间格式化字符串来格式化显示当前时间。 使用 now 标签 在模板中,你可以使用如下方式调用 now 标签: {% now "2006-01-02 15:04:05" %} 这将显示当前的时间,格式为 年-月-日 时:分:秒 。 Go 语言的时间格式化字符串 Go