不能用过滤器过滤富文本中的html标签,因为uni-app小程序和app端不支持vue.filter()和管道语法,rich-text组件不执行模板编译,必须在数据传入前用纯函数预处理字符串。

不能用过滤器过滤富文本中的 HTML 标签——filters 在小程序和 App 端根本不会执行,传进 rich-text 的字符串也不会被自动解析或清洗。
为什么 {{ html | stripTags }} 在小程序里没反应
这不是语法写错了,是 uni-app 小程序平台压根不支持 | 管道语法。你写 {{ content | stripTags }},真机上就原样输出字符串,控制台无报错、无 warning,但函数根本没调用。
-
Vue.filter()只在 H5 端生效,微信/支付宝/字节小程序和 App 端均忽略filters选项 -
rich-text组件本身不走 Vue 模板编译流程,它只认nodes数组或纯字符串,不做任何过滤器链式处理 - 所谓“过滤 HTML 标签”,本质是字符串预处理,必须在数据进入
rich-text前完成,而不是靠模板语法
真正有效的 HTML 标签清洗方式
得用纯函数提前处理字符串,再传给 rich-text 或转成 nodes。别依赖模板层。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 用正则粗筛:比如
html.replace(/<script>]*?>[\s\S]*?<\/script>/gi, '')</script>清除脚本,但注意嵌套和换行需用[sS] - 用
html-parser2解析再重建:更安全,能保留合法标签(p、img)并丢弃iframe、video等非法节点 - 若用
uParse或mp-html,它们内部已做白名单过滤,无需额外清洗——但得确认你传的是原始 HTML 字符串,不是经过错误过滤器“加工”过的残缺内容 - 清洗后务必测试 iOS 小程序:某些正则替换会破坏
img的src属性格式,导致图片 404
富文本中 img 标签宽高处理的坑
直接传带 width="300" 的 img,iOS 小程序仍会撑破容器——rich-text 不识别该属性,只认 style。
- 必须把
width="300"转成style="width:300px; height:auto;",否则无效 - 用正则替换时,要同时处理单双引号:
html.replace(/<img>]*)>/gi, (m, p1) => m.replace(/(width|height)=["'](d+)["']/gi, (_, k, v) => ` style="max-width:90%"`)) - 更稳妥的做法:统一加
style="max-width:100%; height:auto;",避免手动提取数值出错 - 如果用了
mp-html,记得配img-mode="aspectFit",否则默认拉伸变形
最常被忽略的一点:清洗函数必须在 data 或 computed 中显式调用,不能指望模板自动触发;且清洗逻辑要兼容所有端,尤其注意 iOS 对正则和日期字符串的解析差异。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










