模板代码如下:
{{- define "common/web/atom"}}
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
</feed>
{{end}}
很简单的一个代码,主要是想用来实现一个 atom 服务器,返回浏览器 atom.xml 文件
但是调用 ExecuteTemplate 方法后,变成了这个样子:
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
</feed>
尖括号"<" 变成了 <
很奇怪的一个问题。我知道 Go 的 html/template 会对一些输入进行转码,避免把用户的输入生成到 html 。
但是为什么会把我的模板里面的也进行转码了呢
1
godlovesxcjtest OP 求助大家,这个问题困扰了我好几天了
|
2
nanmu42 2022-05-04 10:55:56 +08:00 via iPhone
html/template 自带防注入,会转义内容。
你可能要用它的兄弟 text/template ,注意不要用它直接处理用户输入。 |
3
godlovesxcjtest OP 是尖括号 "<" 变成了 <
|
4
pigmen 2022-05-04 10:59:27 +08:00
使用 text/template
|
5
godlovesxcjtest OP |
6
mengyx 2022-05-04 11:37:46 +08:00 via Android 1
因为你这个“<?xml”是 xml 的 header ,不符合 html 语法。要么你不要使用 html/template 去处理,要么 execute 之后手动添加
|
7
input2output 2022-05-04 12:24:37 +08:00 1
换成:
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }} |
8
godlovesxcjtest OP @mengyx 感谢!
|