Как экранировать специальные символы (кроме ‹›&'") в шаблонах 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 для отображения текста, который может содержать такие символы, как äåüöß?

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


person StephanS    schedule 14.06.2016    source источник
comment
Зачем вам нужно экранировать/использовать сущности для этих персонажей? Я думаю, они в порядке как в кодировках utf-8, так и в iso-8859-1...   -  person BadZen    schedule 14.06.2016
comment
потому что я немец, живущий в Швеции, поэтому данные (например, фамилии) могут содержать эти символы, и в настоящее время ö выглядит как ö.   -  person StephanS    schedule 14.06.2016
comment
Какая кодировка символов указана в вашем HTML-документе? (в идеале, можете ли вы связать нас со страницей, которую вы просматриваете? Сервер может переопределить настройки документа...)   -  person BadZen    schedule 14.06.2016
comment
нет :D что я должен использовать? (да, ответ может быть таким простым) ‹!DOCTYPE html› ‹html›…   -  person StephanS    schedule 14.06.2016
comment
Попробуйте добавить <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> в <head/>...   -  person BadZen    schedule 14.06.2016
comment
да, это исправлено! Вы хотите написать ответ, чтобы я мог нажать на ответ, и вы получите несколько баллов?   -  person StephanS    schedule 14.06.2016


Ответы (1)


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

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

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

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

Дополнительные сведения о кодировках символов в HTML см. в документации W3C.

person BadZen    schedule 14.06.2016