2

我如何取消转义html?

我像这样将一个css文件传递给html

<style>{{.file}}</style>

我明白了

<style>ZgotmplZ</style>

我尝试用 template.HTML(data) 包装该字段,但没有用。

4

1 回答 1

3

Go HTML 模板包正确地扩展了 CSS。引用包的文档template

转义是上下文相关的,因此动作可以出现在 JavaScript、CSS 和 URI 上下文中。

"ZgotmplZ"是一个特殊值,如果您尝试包含的值在上下文中无效或不安全,则将其用作替换。

所以问题是你试图包含的 CSS 值,它不安全。先尝试一些简单的东西,看看它是否有效,例如:

body {background-color: #000}

在文档中找到了讨论"ZgotmplZ"(在 type ErrorCode),引用它:

"ZgotmplZ"解释:

示例模板:

<img src="{{.X}}">
where {{.X}} evaluates to `javascript:...`

讨论:

"ZgotmplZ" is a special value that indicates that unsafe content reached a
CSS or URL context at runtime. The output of the example will be
  <img src="#ZgotmplZ">
If the data comes from a trusted source, use content types to exempt it
from filtering: URL(`javascript:...`).

解决方案

由于您尝试插入的代码是在 CSS 代码而不是 HTML 的上下文中,因此您不能/不应该使用template.HTML(data).

有一个预定义的类型CSS可以安全地包含来自受信任来源的 CSS 代码,例如您指定的 CSS 代码,而不是来自用户填写的 HTML 表单。例子:

var safeCss = template.CSS(`body {background-image: url("paper.gif");}`)

并将safeCss值传递给您的模板参数。

于 2015-01-12T16:55:54.967 回答