Ce face html/template.HTMLEscapeString
template.HTMLEscapeString(s) înlocuiește <, >, &, ' și " cu entitățile HTML corespunzătoare (<, >, &, ', "). Textul rezultat apare în browser exact cum a fost scris, fără să fie interpretat ca HTML.
Când folosești șabloane html/template, codarea se face automat și nu ai nevoie de această funcție. Este utilă când construiești mici bucăți de HTML direct în cod (un mesaj, un fragment pentru un e-mail) sau în funcții puse în FuncMap. Aceeași funcție există și ca html.EscapeString (pachetul html), împreună cu html.UnescapeString.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul de codat. |
Ce returnează
Textul cu caracterele speciale codate.
Exemple
Exemplul 1: Codarea caracterelor speciale
package main
import (
"fmt"
"html/template"
)
func main() {
texte := []string{
`<script>alert("hack")</script>`,
`Tom & Jerry`,
`Ana's "blog" > toate`,
`Iași, fără caractere speciale`,
}
for _, t := range texte {
fmt.Println(template.HTMLEscapeString(t))
}
}
Rezultat
<script>alert("hack")</script>
Tom & Jerry
Ana's "blog" > toate
Iași, fără caractere speciale
Exemplul 2: Fragment HTML construit în cod
package main
import (
"fmt"
"html/template"
"strings"
)
func listaHTML(elemente []string) string {
var sb strings.Builder
sb.WriteString("<ul>")
for _, e := range elemente {
sb.WriteString("<li>" + template.HTMLEscapeString(e) + "</li>")
}
sb.WriteString("</ul>")
return sb.String()
}
func main() {
fmt.Println(listaHTML([]string{"Cafea <boabe>", "Ceai & lămâie"}))
}
Rezultat
<ul><li>Cafea <boabe></li><li>Ceai & lămâie</li></ul>
Greșeli frecvente
- Codezi de două ori (o dată cu
HTMLEscapeString, apoi automat înhtml/template): pe pagină apare&lt;. În șabloane dă textul original. - Folosești
HTMLEscapeStringpentru valori puse în JavaScript sau în URL-uri: acolo regulile sunt diferite (template.JSEscapeString,url.QueryEscape).
Comenzi înrudite
html/template.Template: Șabloane pentru HTML, cu aceeași interfață ca text/template, care codează automat datele după context (protecție XSS).net/url.QueryEscape: QueryEscape codează un text pentru query string (spațiu → +), PathEscape pentru o bucată de cale (spațiu → %20); QueryUnescape decodează.