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

.NET Web应用中HtmlSanitizer特殊字符转义错误的解决问询

解决HtmlSanitizer解析URL参数类内容时的实体错误转换问题

问题本质是HtmlSanitizer默认会解析HTML字符实体:&cent是HTML标准实体(对应¢符号),&pound对应£符号,当输入&centerId=2时,工具会优先匹配&cent并解析,剩余字符拼接后就变成了¢erId=2,同理&pounds=10会被解析为£s=10。

针对不同场景,有以下几种解决方案:

方案1:禁用实体解析功能

如果你的业务场景不需要解析任何HTML实体(比如处理URL参数、请求体这类非HTML内容),可以直接关闭HtmlSanitizer的实体解码:

var sanitiser = new HtmlSanitizer { DecodeEntities = false };
var result = sanitiser.Sanitize(rawText);

这样处理后,&centerId=2会完整保留原始内容,不会被错误转换。

方案2:先转义&符号再处理

如果需要保留实体解析能力(比如同时处理部分HTML内容),可以先将输入中的&转义为&,再进行Sanitize操作:

var rawText = "&centerId=2";
// 先转义所有&为HTML实体格式
var escapedText = rawText.Replace("&", "&");
var sanitiser = new HtmlSanitizer();
var result = sanitiser.Sanitize(escapedText);

处理后的结果是&centerId=2,如果是输出到HTML页面中,浏览器会自动将其解析显示为&centerId=2,既避免了XSS风险,也符合预期显示效果。

方案3:改用URL专用编码工具

如果你的处理对象是URL查询参数或请求体这类非HTML内容,HtmlSanitizer并非最佳选择,建议使用.NET内置的URL编码工具:

  • 使用Uri.EscapeDataString对单个参数值编码
  • 使用HttpUtility.UrlEncode处理URL参数

这类工具会按照URL规则对特殊字符编码,从根源上避免HTML实体解析带来的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:45:02