通过html / template删除传递的参数周围的空格

时间:2019-03-02 18:06:11

标签: go

当我将参数传递给onclick函数时,在该参数周围有空格,为什么以及如何删除它们?

t, _ := template.New("").Parse(`<div onclick="test({{.}})">{{.}}</div>`)
t.Execute(os.Stdout, 1)

结果:

<div onclick="test( 1 )">1</div>

playground

编辑:

在Dave帮助的帮助下,我们可以通过模板进行以下操作:

t, _ := template.New("").Funcs(template.FuncMap{
    "test": func(i interface{}) template.JS {
        switch i.(type) {
        case int:
            s := strconv.Itoa(i.(int))
            return template.JS(s)   
        // other types
        default:
            panic("bad type")
        }
    },
}).Parse(`<div onclick="test({{test .}})">{{.}}</div>`)
t.Execute(os.Stdout, 1)

playground

1 个答案:

答案 0 :(得分:1)

这是Golang做一些事情以确保恶意JS不会出现在模板中的结果。如果您指定要传入的内容对于javascript是安全的,则可以正常使用。

  

键入JS

     

使用这种类型会带来安全风险:封装的内容应来自受信任的来源,因为它将逐字包含在模板输出中。

https://play.golang.org/p/TUOECg1YDtl

t.Execute(os.Stdout, template.JS("1"))

结果:

<div onclick="test(1)">1</div>