From 618269e7df0380fcf28920057b1d529f2d37ac51 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 23 Apr 2025 22:17:06 +0800 Subject: [PATCH] :art: Improve tag escaping --- kernel/model/tag.go | 5 +++++ kernel/search/mark.go | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/kernel/model/tag.go b/kernel/model/tag.go index 6e9470167..d0d652ce6 100644 --- a/kernel/model/tag.go +++ b/kernel/model/tag.go @@ -308,6 +308,11 @@ func SearchTags(keyword string) (ret []string) { labels := labelBlocksByKeyword(keyword) keyword = strings.Join(strings.Split(keyword, " "), search.TermSep) for label := range labels { + if "" == keyword { + ret = append(ret, util.EscapeHTML(label)) + continue + } + _, t := search.MarkText(label, keyword, 1024, Conf.Search.CaseSensitive) ret = append(ret, t) } diff --git a/kernel/search/mark.go b/kernel/search/mark.go index f248809f0..2afcacd99 100644 --- a/kernel/search/mark.go +++ b/kernel/search/mark.go @@ -112,9 +112,15 @@ func EncloseHighlighting(text string, keywords []string, openMark, closeMark str re += ")" ret = util.EscapeHTML(text) + ret = strings.ReplaceAll(ret, """, "\ue000") + ret = strings.ReplaceAll(ret, "<", "\ue001") + ret = strings.ReplaceAll(ret, ">", "\ue002") if reg, err := regexp.Compile(re); err == nil { ret = reg.ReplaceAllStringFunc(ret, func(s string) string { return openMark + s + closeMark }) } + ret = strings.ReplaceAll(ret, "\ue000", """) + ret = strings.ReplaceAll(ret, "\ue001", "<") + ret = strings.ReplaceAll(ret, "\ue002", ">") // 搜索结果预览包含转义符问题 Search results preview contains escape character issue https://github.com/siyuan-note/siyuan/issues/9790 ret = strings.ReplaceAll(ret, "\\