Skip to content

Commit 8591457

Browse files
committed
fix truncate utf8 string.
1 parent 2dc3e4e commit 8591457

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

models/user.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,6 @@ func (u *User) BeforeUpdate() {
196196
}
197197

198198
u.LowerName = strings.ToLower(u.Name)
199-
u.Location = base.TruncateString(u.Location, 255)
200-
u.Website = base.TruncateString(u.Website, 255)
201-
u.Description = base.TruncateString(u.Description, 255)
202199
}
203200

204201
// AfterLoad is invoked from XORM after filling all the fields of this object.

modules/base/tool.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"strings"
2222
"time"
2323
"unicode"
24+
"unicode/utf8"
2425

2526
"code.gitea.io/gitea/modules/git"
2627
"code.gitea.io/gitea/modules/log"
@@ -213,19 +214,19 @@ func EllipsisString(str string, length int) string {
213214
if length <= 3 {
214215
return "..."
215216
}
216-
if len(str) <= length {
217+
if utf8.RuneCountInString(str) <= length {
217218
return str
218219
}
219-
return str[:length-3] + "..."
220+
return string([]rune(str)[:length-3]) + "..."
220221
}
221222

222223
// TruncateString returns a truncated string with given limit,
223224
// it returns input string if length is not reached limit.
224225
func TruncateString(str string, limit int) string {
225-
if len(str) < limit {
226+
if utf8.RuneCountInString(str) < limit {
226227
return str
227228
}
228-
return str[:limit]
229+
return string([]rune(str)[:limit])
229230
}
230231

231232
// StringsToInt64s converts a slice of string to a slice of int64.

modules/base/tool_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ func TestEllipsisString(t *testing.T) {
170170
assert.Equal(t, "fo...", EllipsisString("foobar", 5))
171171
assert.Equal(t, "foobar", EllipsisString("foobar", 6))
172172
assert.Equal(t, "foobar", EllipsisString("foobar", 10))
173+
assert.Equal(t, "测...", EllipsisString("测试文本一二三四", 4))
174+
assert.Equal(t, "测试...", EllipsisString("测试文本一二三四", 5))
175+
assert.Equal(t, "测试文...", EllipsisString("测试文本一二三四", 6))
176+
assert.Equal(t, "测试文本一二三四", EllipsisString("测试文本一二三四", 10))
173177
}
174178

175179
func TestTruncateString(t *testing.T) {
@@ -181,6 +185,10 @@ func TestTruncateString(t *testing.T) {
181185
assert.Equal(t, "fooba", TruncateString("foobar", 5))
182186
assert.Equal(t, "foobar", TruncateString("foobar", 6))
183187
assert.Equal(t, "foobar", TruncateString("foobar", 7))
188+
assert.Equal(t, "测试文本", TruncateString("测试文本一二三四", 4))
189+
assert.Equal(t, "测试文本一", TruncateString("测试文本一二三四", 5))
190+
assert.Equal(t, "测试文本一二", TruncateString("测试文本一二三四", 6))
191+
assert.Equal(t, "测试文本一二三", TruncateString("测试文本一二三四", 7))
184192
}
185193

186194
func TestStringsToInt64s(t *testing.T) {

0 commit comments

Comments
 (0)