diff --git a/mirai-core/src/commonMain/kotlin/message/LongMessageInternal.kt b/mirai-core/src/commonMain/kotlin/message/LongMessageInternal.kt
index 1ca40bce2..768bdfe4f 100644
--- a/mirai-core/src/commonMain/kotlin/message/LongMessageInternal.kt
+++ b/mirai-core/src/commonMain/kotlin/message/LongMessageInternal.kt
@@ -11,7 +11,6 @@ package net.mamoe.mirai.internal.message
 
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.Mirai
-import net.mamoe.mirai.internal.MiraiImpl
 import net.mamoe.mirai.internal.asQQAndroidBot
 import net.mamoe.mirai.internal.getMiraiImpl
 import net.mamoe.mirai.internal.network.protocol.data.proto.MsgTransmit
@@ -158,6 +157,10 @@ internal fun RichMessage.Key.longMessage(brief: String, resId: String, timeSecon
 }
 
 
+private fun String.xmlEnc():String {
+    return this.replace("&", "&")
+}
+
 internal fun RichMessage.Key.forwardMessage(
     resId: String,
     timeSeconds: Long,
@@ -165,29 +168,29 @@ internal fun RichMessage.Key.forwardMessage(
 ): ForwardMessageInternal = with(forwardMessage) {
     val template = """
         <?xml version="1.0" encoding="utf-8"?>
-        <msg serviceID="35" templateID="1" action="viewMultiMsg" brief="${brief.take(30)}"
+        <msg serviceID="35" templateID="1" action="viewMultiMsg" brief="${brief.take(30).xmlEnc()}"
              m_resid="$resId" m_fileName="$timeSeconds"
              tSum="3" sourceMsgId="0" url="" flag="3" adverSign="0" multiMsgFlag="0">
             <item layout="1" advertiser_id="0" aid="0">
-                <title size="34" maxLines="2" lineSpace="12">${title.take(50)}</title>
+                <title size="34" maxLines="2" lineSpace="12">${title.take(50).xmlEnc()}</title>
                 ${
         when {
             preview.size > 4 -> {
                 preview.take(3).joinToString("") {
-                    """<title size="26" color="#777777" maxLines="2" lineSpace="12">$it</title>"""
+                    """<title size="26" color="#777777" maxLines="2" lineSpace="12">${it.xmlEnc()}</title>"""
                 } + """<title size="26" color="#777777" maxLines="2" lineSpace="12">...</title>"""
             }
             else -> {
                 preview.joinToString("") {
-                    """<title size="26" color="#777777" maxLines="2" lineSpace="12">$it</title>"""
+                    """<title size="26" color="#777777" maxLines="2" lineSpace="12">${it.xmlEnc()}</title>"""
                 }
             }
         }
     }
                 <hr hidden="false" style="0"/>
-                <summary size="26" color="#777777">${summary.take(50)}</summary>
+                <summary size="26" color="#777777">${summary.take(50).xmlEnc()}</summary>
             </item>
-            <source name="${source.take(50)}" icon="" action="" appid="-1"/>
+            <source name="${source.take(50).xmlEnc()}" icon="" action="" appid="-1"/>
         </msg>
     """.trimIndent().replace("\n", " ").trim()
     return ForwardMessageInternal(template, resId, null, forwardMessage)