mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
dev day #92
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"html"
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
// A compact list of Czech and English bad words with family-friendly replacements.
|
||||
@@ -138,6 +140,56 @@ func FilterBadWords(s string) (string, bool) {
|
||||
return out, replaced
|
||||
}
|
||||
|
||||
func MaskBadWords(s string) (string, []string) {
|
||||
if strings.TrimSpace(s) == "" { return s, nil }
|
||||
out := s
|
||||
originals := []string{}
|
||||
for _, cr := range compiledRepls {
|
||||
out = cr.re.ReplaceAllStringFunc(out, func(m string) string {
|
||||
originals = append(originals, m)
|
||||
n := len([]rune(m))
|
||||
if n <= 0 { return m }
|
||||
return strings.Repeat("*", n)
|
||||
})
|
||||
}
|
||||
return out, originals
|
||||
}
|
||||
|
||||
func MaskBadWordsHTML(s string) string {
|
||||
if strings.TrimSpace(s) == "" { return html.EscapeString(s) }
|
||||
var b strings.Builder
|
||||
i := 0
|
||||
for i < len(s) {
|
||||
sub := s[i:]
|
||||
best := ""
|
||||
bestLen := 0
|
||||
for _, cr := range compiledRepls {
|
||||
if loc := cr.re.FindStringIndex(sub); loc != nil && loc[0] == 0 {
|
||||
m := sub[:loc[1]]
|
||||
if len(m) > bestLen {
|
||||
best = m
|
||||
bestLen = len(m)
|
||||
}
|
||||
}
|
||||
}
|
||||
if bestLen > 0 {
|
||||
n := utf8.RuneCountInString(best)
|
||||
b.WriteString(`<span class="cw" title="`)
|
||||
b.WriteString(html.EscapeString(best))
|
||||
b.WriteString(`">`)
|
||||
b.WriteString(strings.Repeat("*", n))
|
||||
b.WriteString("</span>")
|
||||
i += bestLen
|
||||
continue
|
||||
}
|
||||
r, size := utf8.DecodeRuneInString(sub)
|
||||
if r == utf8.RuneError && size == 0 { break }
|
||||
b.WriteString(html.EscapeString(sub[:size]))
|
||||
i += size
|
||||
}
|
||||
return b.String()
|
||||
}
|
||||
|
||||
// ContainsSensitiveWords returns true and the matched words if content contains strong/explicit terms.
|
||||
func ContainsSensitiveWords(s string) (bool, []string) {
|
||||
if strings.TrimSpace(s) == "" { return false, nil }
|
||||
|
||||
Reference in New Issue
Block a user