在ASP.NET中过滤HTML标签并只保留换行与空格,最有效的方法是使用正则表达式结合安全的HTML清理策略,确保去除潜在的安全风险(如XSS攻击)同时保留文本格式,以下是具体实现方案:

核心方法:正则表达式过滤
通过正则表达式移除所有HTML标签,但保留<br>、<p>等标签所代表的换行符,并将空格实体转换为普通空格,以下是步骤分解:
-
使用
Regex.Replace进行基础过滤
移除所有HTML标签,但需处理换行标签和空格实体:using System.Text.RegularExpressions; public string FilterHtmlTags(string input) { if (string.IsNullOrEmpty(input)) return input; // 第一步:将换行标签转换为换行符 input = Regex.Replace(input, @"<brs*/?>|</p>", Environment.NewLine, RegexOptions.IgnoreCase); // 第二步:将HTML空格实体( )转换为普通空格 input = Regex.Replace(input, @" ", " ", RegexOptions.IgnoreCase); // 第三步:移除所有其他HTML标签 input = Regex.Replace(input, @"<[^>]+>", string.Empty); // 第四步:解码其他HTML实体(如>、<) input = System.Web.HttpUtility.HtmlDecode(input); return input.Trim(); } -
优化处理连续空格与换行
过滤后文本可能出现多个连续空格或换行,可通过额外处理优化可读性:input = Regex.Replace(input, @"s+", " "); // 合并多个空格 input = Regex.Replace(input, @"(rn|n)+", Environment.NewLine); // 合并多个换行
进阶方案:使用HTML清理库增强安全性
对于需要更高安全性的场景(如用户评论处理),建议使用专业库如HtmlSanitizer,它可配置允许的标签(如保留换行相关标签)并自动防御XSS攻击:

-
通过NuGet安装
HtmlSanitizer包。 -
配置仅允许文本和换行符:
using Ganss.Xss; public string SanitizeHtml(string input) { var sanitizer = new HtmlSanitizer(); sanitizer.AllowedTags.Clear(); // 清除所有允许的标签 sanitizer.AllowedTags.Add("br"); // 只允许<br>标签 sanitizer.AllowedTags.Add("p"); // 允许<p>标签以保留段落换行 sanitizer.AllowedAttributes.Clear(); // 移除所有属性 return sanitizer.Sanitize(input); }此方法更安全,但需注意
<p>标签会被转换为文本换行,可根据需求调整。
性能与安全注意事项
- 正则表达式局限性:基础正则方法可能无法处理嵌套或格式错误的HTML,建议用于受控内容(如系统生成的文本)。
- 安全优先:直接处理用户输入的HTML时,务必使用
HtmlSanitizer等库,避免脚本注入。 - 性能优化:频繁处理大量文本时,可编译正则表达式(
RegexOptions.Compiled)或缓存清理结果。
应用场景示例
- 博客评论过滤:保留用户输入的换行和空格,确保内容整洁且安全。
- 富文本摘要生成:从HTML内容提取纯文本,同时保持段落结构。
- 数据导出:将数据库存储的HTML转换为纯文本文件(如TXT),便于跨平台使用。
独立见解:平衡安全性与功能性
在ASP.NET中过滤HTML标签时,开发者常面临“安全”与“格式保留”的两难选择,单纯依赖正则表达式可能遗漏边缘情况(如HTML实体编码的攻击),而过度清理又会破坏用户体验。分层策略更为可靠:

- 输入层:对用户内容使用
HtmlSanitizer进行严格清理。 - 输出层:根据使用场景选择正则过滤或库处理,例如内部系统可简化,对外内容需强化安全。
- 补充措施:结合ASP.NET Core的模型验证(如
[AllowHtml]属性控制)和输出编码(@Html.Raw()的谨慎使用),构建多重防护。
此方案不仅满足功能需求,更符合OWASP安全规范,适用于企业级应用开发。
互动话题:你在处理HTML内容时遇到过哪些安全或格式问题?欢迎分享你的经验或提问!
原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/2367.html