fix truncate utf8 string (#15828)
* fix truncate utf8 string. * revoke truncated user info.
This commit is contained in:
		
							parent
							
								
									6d2a333fdc
								
							
						
					
					
						commit
						27b29ffb22
					
				
					 2 changed files with 13 additions and 4 deletions
				
			
		|  | @ -21,6 +21,7 @@ import ( | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 	"unicode" | 	"unicode" | ||||||
|  | 	"unicode/utf8" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/modules/git" | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
|  | @ -213,19 +214,19 @@ func EllipsisString(str string, length int) string { | ||||||
| 	if length <= 3 { | 	if length <= 3 { | ||||||
| 		return "..." | 		return "..." | ||||||
| 	} | 	} | ||||||
| 	if len(str) <= length { | 	if utf8.RuneCountInString(str) <= length { | ||||||
| 		return str | 		return str | ||||||
| 	} | 	} | ||||||
| 	return str[:length-3] + "..." | 	return string([]rune(str)[:length-3]) + "..." | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // TruncateString returns a truncated string with given limit,
 | // TruncateString returns a truncated string with given limit,
 | ||||||
| // it returns input string if length is not reached limit.
 | // it returns input string if length is not reached limit.
 | ||||||
| func TruncateString(str string, limit int) string { | func TruncateString(str string, limit int) string { | ||||||
| 	if len(str) < limit { | 	if utf8.RuneCountInString(str) < limit { | ||||||
| 		return str | 		return str | ||||||
| 	} | 	} | ||||||
| 	return str[:limit] | 	return string([]rune(str)[:limit]) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // StringsToInt64s converts a slice of string to a slice of int64.
 | // StringsToInt64s converts a slice of string to a slice of int64.
 | ||||||
|  |  | ||||||
|  | @ -170,6 +170,10 @@ func TestEllipsisString(t *testing.T) { | ||||||
| 	assert.Equal(t, "fo...", EllipsisString("foobar", 5)) | 	assert.Equal(t, "fo...", EllipsisString("foobar", 5)) | ||||||
| 	assert.Equal(t, "foobar", EllipsisString("foobar", 6)) | 	assert.Equal(t, "foobar", EllipsisString("foobar", 6)) | ||||||
| 	assert.Equal(t, "foobar", EllipsisString("foobar", 10)) | 	assert.Equal(t, "foobar", EllipsisString("foobar", 10)) | ||||||
|  | 	assert.Equal(t, "测...", EllipsisString("测试文本一二三四", 4)) | ||||||
|  | 	assert.Equal(t, "测试...", EllipsisString("测试文本一二三四", 5)) | ||||||
|  | 	assert.Equal(t, "测试文...", EllipsisString("测试文本一二三四", 6)) | ||||||
|  | 	assert.Equal(t, "测试文本一二三四", EllipsisString("测试文本一二三四", 10)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestTruncateString(t *testing.T) { | func TestTruncateString(t *testing.T) { | ||||||
|  | @ -181,6 +185,10 @@ func TestTruncateString(t *testing.T) { | ||||||
| 	assert.Equal(t, "fooba", TruncateString("foobar", 5)) | 	assert.Equal(t, "fooba", TruncateString("foobar", 5)) | ||||||
| 	assert.Equal(t, "foobar", TruncateString("foobar", 6)) | 	assert.Equal(t, "foobar", TruncateString("foobar", 6)) | ||||||
| 	assert.Equal(t, "foobar", TruncateString("foobar", 7)) | 	assert.Equal(t, "foobar", TruncateString("foobar", 7)) | ||||||
|  | 	assert.Equal(t, "测试文本", TruncateString("测试文本一二三四", 4)) | ||||||
|  | 	assert.Equal(t, "测试文本一", TruncateString("测试文本一二三四", 5)) | ||||||
|  | 	assert.Equal(t, "测试文本一二", TruncateString("测试文本一二三四", 6)) | ||||||
|  | 	assert.Equal(t, "测试文本一二三", TruncateString("测试文本一二三四", 7)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestStringsToInt64s(t *testing.T) { | func TestStringsToInt64s(t *testing.T) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue