«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать непреднамеренного экранирования HTML и JSON в шаблонах Go?

Как избежать непреднамеренного экранирования HTML и JSON в шаблонах Go?

Опубликовано 9 ноября 2024 г.
Просматривать:488

How to Avoid Unintended Escaping of HTML and JSON in Go Templates?

Экранирование HTML и JSON в шаблонах Go

В шаблонах Go важно правильно обрабатывать HTML и JSON, чтобы предотвратить непреднамеренное экранирование. Рассмотрим следующий шаблон:

 {{ .SomeOtherHTML }} 

Если вы ожидаете, что выходные данные будут просто , вы может возникнуть проблема, когда специальные символы, такие как

 <the_other_html/< 

Решение для экранирования HTML

Чтобы предотвратить это, вам следует передавать HTML-код как тип template.HTML вместо строки. template.HTML — это специальный тип, который указывает Go не экранировать его содержимое. Например:

tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("

Paragraph

"), "String": "

Paragraph

", } tpl.ExecuteTemplate(os.Stdout, "T", tplVars)

Решение для экранирования JSON

Если вам также необходимо визуализировать JSON, вам следует использовать json. Функция маршала для преобразования его в массив байтов. Это не позволяет Go избежать экранирования содержимого JSON. Например:

jsonBytes, _ := json.Marshal(data)
outputString := string(jsonBytes)

Следуя этим рекомендациям, вы можете обеспечить правильное экранирование HTML и JSON в шаблонах Go, что приведет к получению желаемого результата без непреднамеренных изменений.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3