首页 > 解决方案 > 通过 html/template 删除传递的参数周围的空格

问题描述

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

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

结果:

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

操场

编辑:

由 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)

操场

标签: go

解决方案


这是 Golang 做一些事情以确保恶意 JS 不会出现在您的模板中的结果。如果您指定您传入的内容对于 javascript 是安全的,那么它将正常工作。

类型 JS

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

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

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

结果:

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

推荐阅读