Go templates auto-escape but only the five characters <>&' and " (see html.EscapeString)
so this code like
check := func(err error) {
if err != nil {
log.Fatal(err)
}
}
t, err := template.New("foo").Parse(`{{define "T"}}special chars: {{.}}{{end}}`)
check(err)
err = t.ExecuteTemplate(os.Stdout, "T", "<>&' äåüöß")
check(err)
returns (as you can check here: Go Playground)
special chars: <>&' äåüöß
So how do i use golang templates to render text that may contain characters like äåüöß?
It's not like i could escape these myself, because e.g. "ä" escapes to "ä" which means that efter i escape manually, golang just escapes the "&" character part of that a second time and i get "&auml;" (but the html-file should contain a single escaped "ä" so that the browser displays an "ä").
These characters are fine as-is in modern browsers, but you'll need to specify a character encoding in your webpage.
Add the line
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
in your document's head.
For more on character encodings in HTML, see the W3C documentation.