当前位置: > > > > 转到 html/template 并转义
转到 html/template 并转义
来源:stackoverflow
2024-04-23 14:36:34
0浏览
收藏
一分耕耘,一分收获!既然都打开这篇《转到 html/template 并转义》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!
问题内容
根据 html/template 文档中的示例,我不能说我完全理解为什么在我的实验中似乎不一致地转义小于和大于: https://golang.org/pkg/html/template/#hdr-introduction
这是否需要错误报告?由于我对 go 还比较陌生,所以我推迟了。
$ go version go version go1.16 linux/amd64
我在 go1.15.8 中看到了类似的行为。
package main
import (
htmltemplate "html/template"
"os"
texttemplate "text/template"
)
type myvars struct {
flavor string
}
func main() {
vars := myvars{
flavor: "##### html #####",
}
htmltmpl, _ := htmltemplate.parsefiles("index.html")
htmltmpl.execute(os.stdout, vars)
vars = myvars{
flavor: "##### text #####",
}
texttmpl, _ := texttemplate.parsefiles("index.html")
texttmpl.execute(os.stdout, vars)
}
$ cat index.html
{{ .flavor }}
<?xml version="1.0" encoding="utf-8" standalone="no"?>
< span >hello< /span >
<span>hello</span>
{{ "<" }}span{{ ">" }}hello{{ "<" }}/span{{ ">" }}
$ ./experiment ##### html ##### <?xml version="1.0" encoding="UTF-8" standalone="no"?> # Why is only < escaped? < span >Hello< /span > # Why is only < escaped? <span>Hello</span> # Why is neither < nor > escaped? <span>Hello</span> ##### text ##### <?xml version="1.0" encoding="UTF-8" standalone="no"?> < span >Hello< /span > <span>Hello</span> <span>Hello</span>
解决方案
1: {{ .Flavor }}
2: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3: < span >Hello< /span >
4: <span>Hello</span>
5: {{ "<" }}span{{ ">" }}Hello{{ "<" }}/span{{ ">" }}
第 2 行和第 3 行的 < 是文本。 html 模板包在文本中对 < 进行转义,以防止文档阅读器将 < 误解为标记的开头。
第 2 行和第 3 行的 > 按原样写入输出。转义 > 没有任何安全好处。
第 4 行的 < 和 > 是标记的一部分。标签不会被转义。
第 5 行的 < 和 > 是表达式的值。 html模板包完全转义表达式结果。
理论要掌握,实操不能落!以上关于《转到 html/template 并转义》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注米云公众号吧!
