From 7853a3ff9778a5868abac9760052ca1a49c87a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Tue, 9 Sep 2025 14:45:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(utils):=20=E4=BF=AE=E5=A4=8D=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=B6=88=E6=81=AF=E6=97=B6?= =?UTF-8?q?URL=E6=B8=85=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 处理weappiconurl时,统一替换特殊字符和CDATA标记,确保thumburl正确生成 --- Cunkebao/src/utils/common.ts | 60 +++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/Cunkebao/src/utils/common.ts b/Cunkebao/src/utils/common.ts index 68c394c6..5c195d3b 100644 --- a/Cunkebao/src/utils/common.ts +++ b/Cunkebao/src/utils/common.ts @@ -165,74 +165,86 @@ export function parseWeappMsgStr(inputStr: string): any { try { // 1. 解析外层JSON const outerJson = JSON.parse(inputStr); - + // 2. 检查必要字段 if (!outerJson.contentXml || outerJson.type !== "miniprogram") { throw new Error("Invalid miniprogram message format"); } - + // 3. 解析内层XML为JSON const xmlContent = outerJson.contentXml; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlContent, "text/xml"); - + // 检查XML解析是否成功 if (xmlDoc.getElementsByTagName("parsererror").length > 0) { throw new Error("XML parsing failed"); } - + // 4. 提取XML中的关键信息 const msgElement = xmlDoc.getElementsByTagName("msg")[0]; const appmsgElement = xmlDoc.getElementsByTagName("appmsg")[0]; const weappinfoElement = xmlDoc.getElementsByTagName("weappinfo")[0]; - + if (!msgElement || !appmsgElement) { throw new Error("Invalid XML structure"); } - + // 5. 构建appmsg对象 const appmsg: any = { title: appmsgElement.getElementsByTagName("title")[0]?.textContent || "", des: appmsgElement.getElementsByTagName("des")[0]?.textContent || "", type: appmsgElement.getElementsByTagName("type")[0]?.textContent || "", - sourcedisplayname: appmsgElement.getElementsByTagName("sourcedisplayname")[0]?.textContent || "", - appname: appmsgElement.getElementsByTagName("appname")[0]?.textContent || "" + sourcedisplayname: + appmsgElement.getElementsByTagName("sourcedisplayname")[0] + ?.textContent || "", + appname: + appmsgElement.getElementsByTagName("appname")[0]?.textContent || "", }; - + // 6. 处理weappinfo信息 if (weappinfoElement) { appmsg.weappinfo = { - username: weappinfoElement.getElementsByTagName("username")[0]?.textContent || "", - appid: weappinfoElement.getElementsByTagName("appid")[0]?.textContent || "", - type: weappinfoElement.getElementsByTagName("type")[0]?.textContent || "", - version: weappinfoElement.getElementsByTagName("version")[0]?.textContent || "", - weappiconurl: weappinfoElement.getElementsByTagName("weappiconurl")[0]?.textContent || "", - pagepath: weappinfoElement.getElementsByTagName("pagepath")[0]?.textContent || "" + username: + weappinfoElement.getElementsByTagName("username")[0]?.textContent || + "", + appid: + weappinfoElement.getElementsByTagName("appid")[0]?.textContent || "", + type: + weappinfoElement.getElementsByTagName("type")[0]?.textContent || "", + version: + weappinfoElement.getElementsByTagName("version")[0]?.textContent || + "", + weappiconurl: + weappinfoElement.getElementsByTagName("weappiconurl")[0] + ?.textContent || "", + pagepath: + weappinfoElement.getElementsByTagName("pagepath")[0]?.textContent || + "", }; - + // 处理thumburl - 从weappiconurl中提取 const weappiconurl = appmsg.weappinfo.weappiconurl; - if (weappiconurl && weappiconurl.includes('http')) { + if (weappiconurl && weappiconurl.includes("http")) { // 清理URL中的特殊字符和CDATA标记 appmsg.weappinfo.thumburl = weappiconurl - .replace(//g, '') - .replace(/[`"']/g, '') - .replace(/&/g, '&') + .replace(//g, "") + .replace(/[`"']/g, "") + .replace(/&/g, "&") .trim(); } else { appmsg.weappinfo.thumburl = ""; } } - + // 7. 合并结果 const result = { ...outerJson, type: "miniprogram", - appmsg + appmsg, }; - + return result; - } catch (error) { console.error("parseWeappMsgStr error:", error); throw new Error(`Failed to parse miniprogram message: ${error.message}`);