fix(baoyu-post-to-wechat): decode HTML entities and strip tags from article summary

Add cleanSummaryText() to baoyu-md package: decodes HTML entities (&, <, &#x..., etc.)
and strips HTML tags before using frontmatter description/summary as WeChat article digest
This commit is contained in:
Jim Liu 宝玉
2026-04-12 20:16:53 -05:00
parent 517ff566a1
commit 990fea4f7b
7 changed files with 138 additions and 13 deletions
+8 -3
View File
@@ -45,19 +45,24 @@ export function loadCodeThemeCss(themeName: string): string {
}
export function buildHtmlDocument(meta: HtmlDocumentMeta, css: string, html: string, codeThemeCss?: string): string {
const escapeHtmlAttribute = (value: string) => value
.replace(/&/g, "&")
.replace(/"/g, """)
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;");
const lines = [
"<!doctype html>",
"<html>",
"<head>",
' <meta charset="utf-8" />',
' <meta name="viewport" content="width=device-width, initial-scale=1" />',
` <title>${meta.title}</title>`,
` <title>${escapeHtmlAttribute(meta.title)}</title>`,
];
if (meta.author) {
lines.push(` <meta name="author" content="${meta.author}" />`);
lines.push(` <meta name="author" content="${escapeHtmlAttribute(meta.author)}" />`);
}
if (meta.description) {
lines.push(` <meta name="description" content="${meta.description}" />`);
lines.push(` <meta name="description" content="${escapeHtmlAttribute(meta.description)}" />`);
}
lines.push(` <style>${css}</style>`);
if (codeThemeCss) {