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, "&", "&")
-}
-
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))))
+}