如何在 PrimeNG 中正确显示 Unicode 符号(如 ™:®)

作者:袖梨 2026-07-08
在 PrimeNG 组件(如 p-menu)中直接渲染 Unicode 符号(如 ™、®)无需额外转义或 DOM 操作,只需在 TypeScript 字符串中使用 Unicode 转义序列(如 u2122、u00AE)即可原生支持。

在 primeng 组件(如 `p-menu`)中直接渲染 unicode 符号(如 ™、®)无需额外转义或 dom 操作,只需在 typescript 字符串中使用 unicode 转义序列(如 `u2122`、`u00ae`)即可原生支持。

PrimeNG 的菜单、按钮、标签等组件默认基于标准 HTML 渲染,因此完全支持 JavaScript 字符串中的 Unicode 字面量。你无需调用 DomSanitizer.bypassSecurityTrustHtml() 或手动解析 HTML 实体(如 ™ 或 ™),因为这些实体在模板中才需解析,而 TypeScript 字符串中应直接使用 Unicode 码点。

推荐做法:使用 Unicode 转义序列
在定义菜单项时,直接在 label 字符串中嵌入 Unicode:

this.menuItems = [  { label: 'Application 1', icon: 'pi pi-fw', command: () => this.handleAction('app1') },  { label: 'Application 2 u2122', icon: 'pi pi-fw', command: () => this.handleAction('app2') }, // ™  { label: 'Application 3 u00AE', icon: 'pi pi-fw', command: () => this.handleAction('app3') }  // ®];

⚠️ 不推荐的做法

  • 在字符串中写 ™ 或 ™:这会被当作纯文本显示,而非渲染为符号;
  • 错误地依赖 DomSanitizer.bypassSecurityTrustHtml():p-menu 的 label 属性接收的是字符串(非 HTML),强行绕过安全策略不仅无效,还可能引发类型错误或 XSS 风险;
  • 在模板中用 innerHTML 绑定(如 <span [innerHTML]="item.label">):破坏 PrimeNG 模板结构,且丧失事件绑定与图标对齐等内置功能。

? 进阶提示:统一管理符号常量
为提升可维护性,建议将常用符号提取为常量:

export const TRADEMARK = 'u2122';   // ™export const REGISTERED = 'u00AE';  // ®export const COPYRIGHT = 'u00A9';    // ©// 使用示例{ label: `My Product ${TRADEMARK}`, command: () => {} }

? 注意事项总结

  • PrimeNG v14+ 所有基于 label: string 的组件(p-menu, p-tabMenu, p-breadcrumb 等)均原生支持 Unicode 字符;
  • 确保项目源码文件编码为 UTF-8(现代 IDE 默认满足);
  • 若从后端 API 获取含符号的文本,确保响应头 Content-Type 包含 charset=utf-8,且 JSON 字符串本身已正确编码(如 "title": "Appu2122");
  • 避免混合使用 HTML 实体与 Unicode —— 保持语义一致,优先选用 uXXXX 形式。

通过这种方式,你既能保证符号正确渲染,又能维持代码简洁性与安全性,真正实现“零配置”符号支持。

相关文章

精彩推荐