Как избежать использования специальных символов (кроме <>&'") в шаблонах golang?

Автоматически экранировать шаблоны Go, но только пять символов <>&'и " (см. Html.EscapeString)

так что этот код, как

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)

возвращается (как вы можете проверить здесь: Go Playground)

special chars: &lt;&gt;&amp;&#39; äåüöß

Итак, как мне использовать шаблоны golang для рендеринга текста, который может содержать такие символы, как символы?

Я не могу избежать этого сам, потому что, например, "ä" убегает к "& auml;" Это означает, что после того, как я убегу вручную, Голанг просто избегает части символа "&", и я получаю "& amp; auml;" (но html-файл должен содержать один экранированный символ "& auml;", чтобы браузер отображал "ä").

1 ответ

Решение

Эти символы хороши как есть в современных браузерах, но вам нужно указать кодировку символов на своей веб-странице.

Добавьте строку

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

в голове вашего документа.

Подробнее о кодировке символов в HTML см. Документацию W3C.

Другие вопросы по тегам