mirror of
https://github.com/owncast/owncast.git
synced 2025-11-02 11:56:57 +08:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/microcosm-cc/bluemonday"
|
|
"golang.org/x/net/html"
|
|
)
|
|
|
|
// StripHTML will strip HTML tags from a string.
|
|
func StripHTML(s string) string {
|
|
p := bluemonday.NewPolicy()
|
|
return p.Sanitize(s)
|
|
}
|
|
|
|
// MakeSafeStringOfLength will take a string and strip HTML tags,
|
|
// trim whitespace, and limit the length.
|
|
func MakeSafeStringOfLength(s string, length int) string {
|
|
newString := s
|
|
newString = StripHTML(newString)
|
|
newString = htmlUnescape(newString)
|
|
|
|
// Convert utf-8 string into Unicode code points.
|
|
codePoints := []rune(newString)
|
|
|
|
if len(codePoints) > length {
|
|
codePoints = codePoints[:length]
|
|
}
|
|
|
|
newString = string(codePoints)
|
|
newString = strings.ReplaceAll(newString, "\r", "")
|
|
newString = strings.TrimSpace(newString)
|
|
|
|
return newString
|
|
}
|
|
|
|
func htmlUnescape(input string) string {
|
|
token := html.NewTokenizer(strings.NewReader(input))
|
|
var output strings.Builder
|
|
|
|
for {
|
|
tt := token.Next()
|
|
switch tt {
|
|
case html.ErrorToken:
|
|
return output.String()
|
|
case html.TextToken:
|
|
text := string(token.Text())
|
|
output.WriteString(text)
|
|
}
|
|
}
|
|
}
|