html/template.HTMLEscapeString în Go

Codează caracterele speciale HTML (< > & ' ") dintr-un text, ca să poată fi pus sigur într-o pagină.

Sintaxă
func HTMLEscapeString(s string) string

Ce face html/template.HTMLEscapeString

template.HTMLEscapeString(s) înlocuiește <, >, &, ' și " cu entitățile HTML corespunzătoare (&lt;, &gt;, &amp;, &#39;, &#34;). 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

&lt;script&gt;alert(&#34;hack&#34;)&lt;/script&gt;
Tom &amp; Jerry
Ana&#39;s &#34;blog&#34; &gt; 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 &lt;boabe&gt;</li><li>Ceai &amp; lămâie</li></ul>

Greșeli frecvente

  • Codezi de două ori (o dată cu HTMLEscapeString, apoi automat în html/template): pe pagină apare &amp;lt;. În șabloane dă textul original.
  • Folosești HTMLEscapeString pentru 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ă.