You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止sanitize-html工具自动编码HTML实体?

解决方案

出现该问题的原因是sanitize-html默认开启了HTML特殊字符转义策略,即使配置allowedTags: []也会对&、<、>等HTML敏感字符做转义处理,避免输出内容直接嵌入HTML时出现安全风险,你的场景里属于原始内容已经做过一次转义,触发了二次转义导致&变成&amp;。

方案1:直接关闭自动转义(推荐)

sanitize-html v2.7.0及以上版本支持通过escape配置项禁用全局转义,直接修改你的调用参数即可:

const sanitizeHtml = require('sanitize-html');
const TitleText = 'Nintendo &amp; Microsoft &amp; Sony';
console.log('Before', TitleText);
const TitleTextSanitized = sanitizeHtml(TitleText, {
  allowedTags: [],
  escape: false // 关闭自动转义
})
console.log('After', TitleTextSanitized);

调用后输出的结果就会和原始输入一致,不会出现二次转义。

注意:关闭转义后如果后续需要将内容渲染到HTML页面,一定要在渲染阶段单独做转义处理,避免出现XSS安全漏洞。

方案2:清洗后做HTML实体解码

如果使用的sanitize-html版本不支持escape配置,可以在清洗完成后对结果做HTML实体解码,还原原始字符:

  1. 先安装实体处理工具he
npm install he
  1. 修改代码如下:
const sanitizeHtml = require('sanitize-html');
const he = require('he');
const TitleText = 'Nintendo &amp; Microsoft &amp; Sony';
const TitleTextSanitized = he.decode(sanitizeHtml(TitleText, {allowedTags: []}));

内容的提问来源于stack exchange,提问作者volume one

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:06:03