ZgotmplZ
入力が無効であることを示す特別な値です。のドキュメントから引用html/template
:
"ZgotmplZ" is a special value that indicates that unsafe content reached a
CSS or URL context at runtime. The output of the example will be
<img src="#ZgotmplZ">
If the data comes from a trusted source, use content types to exempt it
from filtering: URL(`javascript:...`).
有効なURL テキストに置き換えたい場合は、特別なsafeURL
機能などは必要ありません。テンプレートの実行結果が のような値になった場合"#ZgotmplZ"
、挿入しようとしていた URL が無効であることを意味します。
次の例を参照してください。
t := template.Must(template.New("").Parse(`<a href="{{.}}"></a>` + "\n"))
t.Execute(os.Stdout, "http://google.com")
t.Execute(os.Stdout, "badhttp://google.com")
出力:
<a href="http://google.com"></a>
<a href="#ZgotmplZ"></a>
template.URL
URL をエスケープせずにそのまま使用する場合は、type の値を使用できます。この場合、有効な URL でなくても、指定された値がそのまま使用されることに注意してください。
safeURL
テンプレートで使用できるある種のマジックまたは事前宣言された関数ではありません。string
ただし、 url パラメーターを type の値として返す独自のカスタム関数を登録することもできますtemplate.URL
。
t2 := template.Must(template.New("").Funcs(template.FuncMap{
"safeURL": func(u string) template.URL { return template.URL(u) },
}).Parse(`<a href="{{. | safeURL}}"></a>` + "\n"))
t2.Execute(os.Stdout, "http://google.com")
t2.Execute(os.Stdout, "badhttp://google.com")
出力:
<a href="http://google.com"></a>
<a href="badhttp://google.com"></a>
注:テンプレートの実行に値を直接渡すことができる場合は、カスタム関数template.URL
を登録して使用する必要はありません。safeURL()
t3 := template.Must(template.New("").Parse(`<a href="{{.}}"></a>` + "\n"))
t3.Execute(os.Stdout, template.URL("http://google.com"))
t3.Execute(os.Stdout, template.URL("badhttp://google.com"))
出力:
<a href="http://google.com"></a>
<a href="badhttp://google.com"></a>
Go Playgroundでこれらを試してみてください。