// Package cqcode provides CQCode util functions. package cqcode import "strings" /*EscapeText 将字符串raw中部分字符转义 & -> & [ -> [ ] -> ] */ func EscapeText(s string) string { count := strings.Count(s, "&") count += strings.Count(s, "[") count += strings.Count(s, "]") if count == 0 { return s } // Apply replacements to buffer. var b strings.Builder b.Grow(len(s) + count*4) start := 0 for i := 0; i < count; i++ { j := start for index, r := range s[start:] { if r == '&' || r == '[' || r == ']' { j += index break } } b.WriteString(s[start:j]) switch s[j] { case '&': b.WriteString("&") case '[': b.WriteString("[") case ']': b.WriteString("]") } start = j + 1 } b.WriteString(s[start:]) return b.String() } /*EscapeValue 将字符串value中部分字符转义 , -> , & -> & [ -> [ ] -> ] */ func EscapeValue(value string) string { ret := EscapeText(value) return strings.ReplaceAll(ret, ",", ",") } /*UnescapeText 将字符串content中部分字符反转义 & -> & [ -> [ ] -> ] */ func UnescapeText(content string) string { ret := content ret = strings.ReplaceAll(ret, "[", "[") ret = strings.ReplaceAll(ret, "]", "]") ret = strings.ReplaceAll(ret, "&", "&") return ret } /*UnescapeValue 将字符串content中部分字符反转义 , -> , & -> & [ -> [ ] -> ] */ func UnescapeValue(content string) string { ret := strings.ReplaceAll(content, ",", ",") return UnescapeText(ret) }