[#6778] updated the excerpt modifier to properly account for multibyte characters

This commit is contained in:
Gani Georgiev 2025-04-28 06:00:11 +03:00
parent fac0d5b899
commit c7c590bace
3 changed files with 24 additions and 4 deletions

View File

@ -4,6 +4,8 @@
- Updated the default `COUNT` list request query to use `rowid` when possible to minimize the need of having the `id` field in a covering index.
- Updated the excerpt modifier to properly account for multibyte characters ([#6778](https://github.com/pocketbase/pocketbase/issues/6778)).
## v0.27.1

View File

@ -135,10 +135,14 @@ func (m *excerptModifier) Modify(value any) (any, error) {
result := strings.TrimSpace(builder.String())
if len(result) > m.max {
result = strings.TrimSpace(result[:m.max])
if m.withEllipsis {
result += "..."
// note: casted to []rune to properly account for multi-byte chars
runes := []rune(result)
if len(runes) > m.max {
result = string(runes[:m.max])
result = strings.TrimSpace(result)
if m.withEllipsis {
result += "..."
}
}
}

View File

@ -134,6 +134,20 @@ func TestExcerptModifierModify(t *testing.T) {
html,
plainText,
},
// multibyte chars
{
"mutibyte chars <= max",
[]string{"4", "t"},
"аб\nв ",
"аб в",
},
{
"mutibyte chars > max",
[]string{"3", "t"},
"аб\nв ",
"аб...",
},
}
for _, s := range scenarios {