如何在Golang模板中使用动态HTML标签?
解决动态HTML标签渲染被转义的问题
问题核心是模板引擎默认会对输出的HTML特殊字符(如<、>)进行转义,防止XSS注入,所以你的动态标签被转成了实体字符。要实现预期效果,需要告诉模板引擎这部分内容是安全的HTML,无需转义,具体有两种常用写法:
写法一:拼接后整体标记为安全HTML
{{ printf "<%s>%s</%s>" (or .Settings.headlineTag "h2") .Content.headline (or .Settings.headlineTag "h2") | safeHTML }}
- 用
printf拼接完整的标题标签内容 - 通过
safeHTML过滤器标记内容为安全HTML,禁止引擎转义
写法二:分标签部分标记安全HTML
如果想保留原有的换行格式,可以分开处理开始和结束标签:
{{ (printf "<%s>" (or .Settings.headlineTag "h2")) | safeHTML }} {{ .Content.headline }} {{ (printf "</%s>" (or .Settings.headlineTag "h2")) | safeHTML }}
- 分别生成开始/结束标签字符串,再用
safeHTML标记为安全内容 - 标题文本部分如果不需要HTML解析,保持原样即可
注意:只有当你完全信任headlineTag的来源(比如是自己配置的固定值,而非用户输入)时,才适合用这种方式,避免引入XSS风险。
内容的提问来源于stack exchange,提问作者zarathustra
相关产品推荐
相关产品推荐

