From d36e8dde660795ced1543fdb6c1bf6297554bd83 Mon Sep 17 00:00:00 2001 From: eatmoreapple <15055461510@163.com> Date: Mon, 2 Aug 2021 22:28:08 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E5=8E=9F=E5=A7=8B?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=86=85=E5=AE=B9=E4=B8=AD=E6=9C=89html?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=9A=E8=A2=AB=E8=BF=87=E6=BB=A4=E7=9A=84?= =?UTF-8?q?=E7=8E=B0=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- message.go | 19 +++++-------------- parser.go | 17 ++++++++--------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/message.go b/message.go index 2f3350c..91d64d0 100644 --- a/message.go +++ b/message.go @@ -8,7 +8,6 @@ import ( "html" "net/http" "os" - "regexp" "strconv" "strings" "sync" @@ -254,8 +253,7 @@ func (m *Message) Card() (*Card, error) { return nil, errors.New("card message required") } var card Card - content := XmlFormString(m.Content) - err := xml.Unmarshal([]byte(content), &card) + err := xml.Unmarshal(stringToByte(m.Content), &card) return &card, err } @@ -265,8 +263,7 @@ func (m *Message) FriendAddMessageContent() (*FriendAddMessage, error) { return nil, errors.New("friend add message required") } var f FriendAddMessage - content := XmlFormString(m.Content) - err := xml.Unmarshal([]byte(content), &f) + err := xml.Unmarshal(stringToByte(m.Content), &f) return &f, err } @@ -276,8 +273,7 @@ func (m *Message) RevokeMsg() (*RevokeMsg, error) { return nil, errors.New("recalled message required") } var r RevokeMsg - content := XmlFormString(m.Content) - err := xml.Unmarshal([]byte(content), &r) + err := xml.Unmarshal(stringToByte(m.Content), &r) return &r, err } @@ -343,17 +339,12 @@ func (m *Message) init(bot *Bot) { } } } - if regexp.MustCompile(`^<`).MatchString(m.Content) { - m.Content = html.UnescapeString(m.Content) - } - // 处理消息中的换行 m.Content = strings.Replace(m.Content, `
`, "\n", -1) + // 处理html转义字符 + m.Content = html.UnescapeString(m.Content) // 处理消息中的emoji表情 m.Content = FormatEmoji(m.Content) - if m.IsText() { - m.Content = XmlFormString(m.Content) - } } // SendMessage 发送消息的结构体 diff --git a/parser.go b/parser.go index c0facd6..602a184 100644 --- a/parser.go +++ b/parser.go @@ -7,15 +7,17 @@ import ( "math/rand" "mime/multipart" "net/http" + "reflect" "strconv" "strings" "time" + "unsafe" ) func ToBuffer(v interface{}) (*bytes.Buffer, error) { var buffer bytes.Buffer encoder := json.NewEncoder(&buffer) - // 这里要设置进制html转义 + // 这里要设置禁止html转义 encoder.SetEscapeHTML(false) err := encoder.Encode(v) return &buffer, err @@ -25,6 +27,7 @@ func ToBuffer(v interface{}) (*bytes.Buffer, error) { func GetRandomDeviceId() string { rand.Seed(time.Now().Unix()) var builder strings.Builder + builder.Grow(16) builder.WriteString("e") for i := 0; i < 15; i++ { r := rand.Intn(9) @@ -42,14 +45,6 @@ func getWebWxDataTicket(cookies []*http.Cookie) string { return "" } -// XmlFormString Form Xml 格式化 -func XmlFormString(text string) string { - lt := strings.ReplaceAll(text, "<", "<") - gt := strings.ReplaceAll(lt, ">", ">") - br := strings.ReplaceAll(gt, "
", "\n") - return strings.ReplaceAll(br, "&amp;", "&") -} - func getTotalDuration(delay ...time.Duration) time.Duration { var total time.Duration for _, d := range delay { @@ -107,3 +102,7 @@ func scanJson(resp *http.Response, v interface{}) error { } return json.Unmarshal(buffer.Bytes(), v) } + +func stringToByte(s string) []byte { + return *(*[]byte)(unsafe.Pointer(&*(*reflect.StringHeader)(unsafe.Pointer(&s)))) +}