/** * HTML内容处理工具 * 用于处理富文本内容中的格式问题 */ /** * 处理HTML内容 * @param {string} htmlContent - 原始HTML内容 * @returns {string} 处理后的HTML内容 */ export function processHtmlContent(htmlContent) { if (!htmlContent) return '' let processedContent = htmlContent // 1. 处理段落中的前导空格,转换为缩进 processedContent = processedContent.replace(/

\s+([^<]*)<\/p>/g, '

$1

') // 2. 处理段落内部的多个连续空格 processedContent = processedContent.replace( /

([^<]*?)\s{2,}([^<]*?)<\/p>/g, '

$1$2

', ) // 3. 处理图片容器,添加统一的样式类 processedContent = processedContent.replace( /
/g, '
', ) // 5. 处理视频容器(如果有的话) processedContent = processedContent.replace( /
/g, '
', ) // 6. 移除空的段落标签 processedContent = processedContent.replace(/

<\/p>/g, '') // 7. 处理图片的alt属性 processedContent = processedContent.replace( /]*?)src="([^"]*?)"([^>]*?)\/?>/g, '', ) return processedContent } /** * 获取处理HTML内容的CSS样式 * @returns {string} CSS样式字符串 */ export function getHtmlContentStyles() { return ` /* 缩进段落样式 */ .indent { text-indent: 2em; margin-bottom: 1em; line-height: 1.6; } /* 缩进文本样式 */ .indent-text { margin-left: 2em; } /* 处理后的图片容器样式 */ .processed-image { margin: 20px 0; text-align: center; background: #f8f9fa; border-radius: 8px; padding: 15px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } /* 内容图片样式 */ .content-image { max-width: 100%; height: auto; border-radius: 6px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15); transition: transform 0.3s ease; } .content-image:hover { transform: scale(1.02); } /* 处理后的音频容器样式 */ .processed-audio { margin: 15px 0; padding: 15px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 10px; text-align: center; } /* 处理后的视频容器样式 */ .processed-video { margin: 20px 0; padding: 10px; background: #000; border-radius: 8px; text-align: center; } /* 通用媒体容器样式 */ .media-wrap { position: relative; overflow: hidden; } /* 响应式处理 */ @media (max-width: 768px) { .processed-image { margin: 15px 0; padding: 10px; } .indent { text-indent: 1.5em; } .indent-text { margin-left: 1.5em; } } ` }