HtmlEscape în Dart

Înlocuiește caracterele speciale HTML (< > & " ' /) cu entități, ca textul să nu poată injecta cod în pagină.

Sintaxă
const HtmlEscape([HtmlEscapeMode mode = HtmlEscapeMode.unknown])
String convert(String text)
const HtmlEscape htmlEscape

Ce face HtmlEscape

HtmlEscape transformă caracterele care au înțeles în HTML în entități: < devine &lt;, & devine &amp; și așa mai departe. Astfel, un text venit de la utilizator se afișează exact cum l-a scris, fără să fie interpretat ca HTML (protecție împotriva XSS).

Constanta gata făcută htmlEscape (cu modul implicit HtmlEscapeMode.unknown) înlocuiește < > & " ' /. Alte moduri: HtmlEscapeMode.element (doar < > &, pentru conținutul unui element) și HtmlEscapeMode.attribute (pentru valori între ghilimele duble).

Parametri

Parametru Descriere
mode Ce caractere se înlocuiesc (unknown, element, attribute, sqAttribute).
text La convert: textul de protejat.

Ce returnează

convert: textul cu entitățile HTML.

Exemple

Exemplul 1: Comentariu periculos afișat în siguranță

import 'dart:convert';

void main() {
  const comentariu = '<script>alert("hack")</script> & salut';
  print(htmlEscape.convert(comentariu));
  print('<p>${htmlEscape.convert('Ion & Ana')}</p>');
}

Rezultat

&lt;script&gt;alert(&quot;hack&quot;)&lt;&#47;script&gt; &amp; salut
<p>Ion &amp; Ana</p>

Exemplul 2: Modurile de escapare

import 'dart:convert';

void main() {
  const text = '''Ana's "notă" <10> & 1/2''';
  print(const HtmlEscape().convert(text));
  print(const HtmlEscape(HtmlEscapeMode.element).convert(text));
  print(const HtmlEscape(HtmlEscapeMode.attribute).convert(text));
}

Rezultat

Ana&#39;s &quot;notă&quot; &lt;10&gt; &amp; 1&#47;2
Ana's "notă" &lt;10&gt; &amp; 1/2
Ana's &quot;notă&quot; &lt;10&gt; &amp; 1/2

Greșeli frecvente

  • Construiești HTML lipind direct textul utilizatorului. Un nume ca <img onerror=…> rulează cod în pagina altora. Trece orice text extern prin htmlEscape.
  • Escapezi de două ori și pe pagină apare &amp;lt;. Aplică escaparea o singură dată, chiar înainte de afișare.

Comenzi înrudite

  • jsonEncode: Transformă hărți, liste, texte, numere, bool și null într-un text JSON; alte obiecte trebuie să aibă toJson().
  • Codec: Clasa de bază pentru perechi encode/decode (utf8, base64, json); fuse le leagă în lanț, inverted le inversează.
  • HttpRequest: HttpRequest este o cerere primită de HttpServer: metoda (GET, POST), adresa (uri), antetele, corpul și răspunsul de trimis.