当前位置: 首页 > news >正文

前端富文本处理:解码、清洗与适配

1. 核心目标

在后端返回的富文本内容(HTML字符串)直接用于前端渲染时,通常会出现样式错乱、图片溢出或编码错误的问题。本方案旨在通过字符串预处理,实现内容的安全解码样式清洗以及移动端适配

2. 处理流程解析

步骤一:HTML 实体解码
后端传输的数据往往包含转义字符(如<,>等),直接渲染会显示为乱码。

  • 实现逻辑:使用正则表达式全局替换,将常见的 HTML 实体还原为对应的字符。
  • 关键代码逻辑
    • &lt;<
    • &gt;>
    • &amp;&
    • &quot;"

步骤二:CSS 样式清洗与白名单机制
为了防止外部样式污染页面布局,需要剔除有害或无效的 CSS 属性,仅保留必要的排版样式。

  • 去除强制不换行
    • 正则匹配text-wrap-mode: nowrap;并替换为空,确保文字在移动端能够自动换行。
  • Style 属性白名单过滤
    • 遍历所有标签的style属性。
    • 保留策略:仅保留text-align(左对齐、居中、右对齐),删除字体大小、颜色等其他内联样式,以适配应用的统一主题。

步骤三:图片响应式适配
这是移动端富文本渲染最关键的一步。

  • 清除宽高限制:移除<img>标签中原有的widthheight属性,防止固定像素值导致图片过大溢出屏幕。
  • 注入自适应样式
    • <img>标签中强制注入内联样式:max-width: 100%; height: auto; display: block; margin: 10px auto;
    • 效果:图片最大宽度不超过屏幕宽度,高度自动按比例缩放,并自动居中显示。

步骤四:标签规范化

  • 将所有<span>标签重置为无属性状态(<span>),去除可能存在的干扰类名或事件绑定。
3. 代码实现摘要
// 核心处理函数 sanitizeHtml(str) { if (!str) return ''; let html = str; // 1. 基础解码 html = html.replace(/&lt;/g, '<')...; // 其他解码略 // 2. 样式清洗:去除 nowrap html = html.replace(/text-wrap-mode:\s*nowrap;?/g, ''); // 3. 样式清洗:仅保留 text-align html = html.replace(/style="([^"]*)"/gi, (match, styleStr) => { const matchAlign = styleStr.match(/text-align:\s*(left|center|right)/i); return matchAlign ? `style="${matchAlign[1]};"` : ''; }); // 4. 图片适配 html = html.replace(/(width|height)="[^"]*"/gi, ''); // 移除原有宽高 html = html.replace(/<img/gi, '<img style="max-width:100%;height:auto;display:block;margin:10px auto;"'); return html; }
http://www.jsqmd.com/news/733396/

相关文章:

  • AT32F4系列CAN总线配置避坑指南:从过滤器组到时间戳,手把手调通你的第一个CAN节点
  • 不锈钢反应釜|上海东玺制冷仪器 - 品牌推荐大师
  • Windows任务栏透明美化终极指南:TranslucentTB完整配置手册
  • Windows系统管理工具WinUtil:如何让系统维护变得像点菜一样简单?
  • Podcast Bulk Downloader:3分钟搞定播客批量下载的终极解决方案
  • Steam成就管理神器:高效掌控游戏成就的完整指南
  • 团队协作场景下,如何使用Taotoken CLI统一配置多成员的开发环境
  • 抖音内容下载工具全攻略:从零开始掌握批量下载技巧
  • 微信语音导出mp3全攻略:手机电脑免装软件,用浏览器在线工具搞定
  • PostgreSQL插件管理避坑指南:从pg_stat_statements安装到安全删除的完整流程
  • 玻璃反应釜|上海东玺制冷仪器 - 品牌推荐大师
  • 从按下睡眠键到屏幕熄灭:手把手调试UEFI BIOS中的S3睡眠流程(以EDK2为例)
  • 批量视频更新怎么弄?凌风工具箱满足跨境多平台需求
  • 告别STM32F4,我为什么最终选了NXP LPC4357这颗双核MCU?
  • 为多租户saas平台集成taotoken以实现客户专属的ai功能
  • 2025届学术党必备的六大AI科研平台解析与推荐
  • 关于ASTM D4169的随机振动测试:定义、参数与模拟目的
  • 复兴号司机室操作台保姆级拆解:从风压表到黑匣子,带你摸透高铁驾驶舱
  • RTOS任务调度失效的7个隐性陷阱:C语言开发者必须在Q2前掌握的2026新规应对指南
  • 太原易碎品搬运
  • FOC调试避坑指南:为什么电流环PI参数大了电机会“尖叫”?从噪声到稳定性的实战解析
  • 手机拍照暗光不给力?聊聊4 Cell Remosaic技术如何让夜景更亮更清晰
  • Uni-Mol:三维分子表示学习的架构范式演进
  • 别再只会用sys.argv了!Python argparse模块保姆级教程(含实战避坑)
  • 如何通过 Python 快速接入 Taotoken 并调用多模型 API 服务
  • iperf3 Windows终极指南:免费网络性能测试工具完整使用教程
  • 别再死记硬背了!用Python+Matplotlib动态模拟VGA扫描过程,彻底搞懂时序图
  • ICPC2026浙江省赛 游记
  • 从网易外包到转正上岸,我的真实经历与避坑指南(含薪资福利细节)
  • 八大网盘直链解析终极解决方案:免费开源高效下载工具全解析