模板引擎增加text/html方法,用于过滤html标签及保留html标签

This commit is contained in:
john
2018-10-15 13:46:51 +08:00
parent 43a2dde739
commit 60fa83c158
3 changed files with 34 additions and 3 deletions

View File

@ -48,7 +48,7 @@ func (r *Response) ParseTpl(tpl string, params map[string]interface{}, funcmap..
if len(funcmap) > 0 {
fmap = funcmap[0]
}
return gins.View().Parse(tpl, r.buildInVars(params), r.buildInfuncs(fmap))
return gins.View().Parse(tpl, r.buildInVars(params), r.buildInFuncs(fmap))
}
// 解析并返回模板内容
@ -57,7 +57,7 @@ func (r *Response) ParseTplContent(content string, params map[string]interface{}
if len(funcmap) > 0 {
fmap = funcmap[0]
}
return gins.View().ParseContent(content, r.buildInVars(params), r.buildInfuncs(fmap))
return gins.View().ParseContent(content, r.buildInVars(params), r.buildInFuncs(fmap))
}
// 内置变量
@ -72,7 +72,7 @@ func (r *Response) buildInVars(params map[string]interface{}) map[string]interfa
}
// 内置函数
func (r *Response) buildInfuncs(funcmap map[string]interface{}) map[string]interface{} {
func (r *Response) buildInFuncs(funcmap map[string]interface{}) map[string]interface{} {
if funcmap == nil {
funcmap = make(map[string]interface{})
}

View File

@ -78,6 +78,7 @@ func New(path string) *View {
view.SetDelimiters("{{", "}}")
// 内置方法
view.BindFunc("text", view.funcText)
view.BindFunc("html", view.funcHtml)
view.BindFunc("include", view.funcInclude)
return view
}
@ -168,3 +169,9 @@ func (view *View) funcText(html interface{}) string {
return ghtml.StripTags(gconv.String(html))
}
// 模板内置方法html
func (view *View) funcHtml(html interface{}) template.HTML {
return template.HTML(gconv.String(html))
}

View File

@ -0,0 +1,24 @@
package main
import (
"gitee.com/johng/gf/g/os/gview"
"gitee.com/johng/gf/g"
)
func main() {
if c, err := gview.ParseContent(`{{"<div>测试</div>模板引擎默认处理HTML标签<script>alert(\"test\");</script>\n"}}`, nil); err == nil {
g.Dump(c)
} else {
g.Dump(c)
}
if c, err := gview.ParseContent(`{{"<div>测试</div>去掉HTML标签<script>alert(\"test\");</script>\n"|text}}`, nil); err == nil {
g.Dump(c)
} else {
g.Dump(c)
}
if c, err := gview.ParseContent(`{{"<div>测试</div>保留HTML标签<script>alert(\"test\");</script>\n"|html}}`, nil); err == nil {
g.Dump(c)
} else {
g.Dump(c)
}
}