diff --git a/core/share.go b/core/share.go index 202c27d89..98a3ed3ca 100644 --- a/core/share.go +++ b/core/share.go @@ -4,6 +4,7 @@ import ( "context" "strings" "time" + "unicode/utf8" "github.com/Masterminds/squirrel" "github.com/deluan/rest" @@ -119,8 +120,21 @@ func (r *shareRepositoryWrapper) Save(entity interface{}) (string, error) { log.Error(r.ctx, "Invalid Resource ID", "id", firstId) return "", model.ErrNotFound } - if len(s.Contents) > 30 { - s.Contents = s.Contents[:26] + "..." + + const maxContentRunes = 30 + const truncateToRunes = 26 + + var runeCount int + var truncateIndex int + for i := range s.Contents { + runeCount++ + if runeCount == truncateToRunes+1 { + truncateIndex = i + } + } + + if runeCount > maxContentRunes { + s.Contents = s.Contents[:truncateIndex] + "..." } id, err = r.Persistable.Save(s)