go - 通过 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)
解决方案
这是 Golang 做一些事情以确保恶意 JS 不会出现在您的模板中的结果。如果您指定您传入的内容对于 javascript 是安全的,那么它将正常工作。
类型 JS
使用这种类型会带来安全风险:封装的内容应该来自受信任的来源,因为它将逐字包含在模板输出中。
https://play.golang.org/p/TUOECg1YDtl
t.Execute(os.Stdout, template.JS("1"))
结果:
<div onclick="test(1)">1</div>
推荐阅读
- visual-studio - 在 Visual Studio 测试资源管理器窗口中看不到 boost 单元测试命名空间和类名
- javascript - 观察数据从父母到孩子的变化,反之亦然
- php - 如何确定与其大部分内容不同的数组值?
- android - 如何在 Android 应用程序中隐藏 API 密钥?
- reactjs - 如何使用功能组件向 ref 公开功能?
- c# - 如何使用引导确认模式删除选定的复选框行?SQL & MVC
- flutter - 如何在 MaterialApp 主题中设置 fontSize 的 MediaQuery textScaleFactor
- r - 运行线性回归时如何获得系数的协方差矩阵?
- node.js - 如何修复 knex 中由 union 构建的查询
- c# - Xaf如何根据当前用户为导航项设置ObjectKey