贝利信息

Angular 中使用 innerHTML 安全显示富文本内容的正确方法

日期:2026-01-26 00:00 / 作者:碧海醫心

在 angular 中直接绑定 html 字符串到 `[innerhtml]` 会因默认安全策略被自动过滤;需通过 `domsanitizer` 显式信任内容,才能安全渲染富文本(如带链接的段落)。

Angular 默认对 [innerHTML] 绑定的内容执行严格的安全检查,任何包含

、 等标签的字符串都会被当作潜在 XSS 风险而原样转义显示(即显示为纯文本而非可渲染的 HTML),这正是你看到“HTML 没有生效”的根本原因——它不是“不工作”,而是被主动拦截了。

✅ 正确做法是:使用 DomSanitizer 的 bypassSecurityTrustHtml() 方法显式标记该字符串为“可信 HTML”,从而绕过 Angular 的默认清理机制:

import { Component, OnInit } from '@angular/core';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';

@Component({
  selector: 'app-rich-text',
  template: ``
})
export class RichTextComponent implements OnInit {
  str = '

Please ensure Process Model diagram represents Functions adequately (boxes that represent an activity or group of activities that produce an outcome):


Click here

'; safeStr!: SafeHtml; constructor(private sanitizer: DomSanitizer) {} ngOnInit() { this.safeStr = this.sanitizer.bypassSecurityTrustHtml(this.str); } }

⚠️ 重要注意事项:

getTextOn

ly(html: string): string { const doc = new DOMParser().parseFromString(html, 'text/html'); return doc.body.textContent || ''; }

总结:[innerHTML] 本身工作正常,问题在于 Angular 的安全模型。信任 HTML 必须显式授权,且始终以安全性为前提——信任 ≠ 放行,而是可控、可审计、可追溯的信任。