esc_html în WordPress

Securitate WordPress 2.8

Escapează textul pentru afișare în HTML: transformă < > & și ghilimelele în entități, ca să nu fie interpretate ca cod.

Sintaxă
esc_html( string $text ): string

Ce face esc_html

esc_html() (din WordPress 2.8.0) pregătește un text pentru afișare între etichete HTML. Verifică întâi că textul e UTF-8 valid, apoi transformă caracterele speciale în entități: < devine &lt;, & devine &amp;, ghilimelele devin &quot; și &#039;. Entitățile deja existente nu sunt codificate a doua oară.

Regula WordPress este „escapează cât mai târziu”, adică chiar în momentul afișării: echo esc_html( $nume );. Așa, un comentariu sau un câmp completat cu <script> apare pe pagină ca text și nu rulează (protecție împotriva XSS).

Pentru texte traductibile există variantele esc_html__() (întoarce traducerea escapată) și esc_html_e() (o și afișează). Pentru valori de atribute folosește esc_attr(), pentru adrese esc_url(), iar când vrei să păstrezi o parte din HTML, wp_kses_post().

Parametri

Parametru Descriere
$text Textul de escapat.

Ce returnează

Textul escapat (șir).

Exemple

Exemplul 1: Afișarea unui nume trimis de utilizator

Un nume care conține & și o etichetă HTML apare pe pagină exact cum a fost scris, fără să fie interpretat.

<?php
$nume = 'Ana & Mihai <b>Popescu</b>';
echo '<p>Rezervare pe numele: ' . esc_html( $nume ) . '</p>';

Ce afișează pagina

<p>Rezervare pe numele: Ana &amp; Mihai &lt;b&gt;Popescu&lt;/b&gt;</p>

Exemplul 2: Un script injectat devine text inofensiv

Titlul unui articol trimis din formular conține un script; după esc_html() browserul îl afișează ca text.

<?php
$titlu = get_post_meta( get_the_ID(), 'dex_subtitlu', true );
// valoarea salvată: <script>alert("hack")</script>
echo '<h2>' . esc_html( $titlu ) . '</h2>';

Ce afișează pagina

<h2>&lt;script&gt;alert(&quot;hack&quot;)&lt;/script&gt;</h2>

Exemplul 3: Text traductibil cu esc_html_e()

esc_html_e() traduce textul în domeniul temei, îl escapează și îl afișează.

<?php
?>
<p><?php esc_html_e( 'Program: luni - vineri, 8 - 20', 'dex-copil' ); ?></p>

Ce afișează pagina

<p>Program: luni - vineri, 8 - 20</p>

Greșeli frecvente

  • Să folosești esc_html() în atribute sau pentru adrese: pentru value="..." e esc_attr(), pentru href e esc_url().
  • Să escapezi la salvare și să păstrezi textul escapat în baza de date: la salvare se face sanitizare (sanitize_text_field()), iar escaparea se face la afișare.
  • Să aplici esc_html() pe conținut care trebuie să păstreze formatarea (paragrafe, linkuri): toate etichetele apar ca text. Folosește wp_kses_post().

Comenzi înrudite

  • esc_attr: Escapează o valoare pentru un atribut HTML (value, title, alt, data-*), ca ghilimelele să nu închidă atributul.
  • esc_url: Curăță o adresă pentru afișare în href sau src: respinge protocoalele nepermise și codifică & ca &#038;.
  • wp_kses: Păstrează doar etichetele și atributele HTML permise și elimină restul (scripturi, atribute on*, protocoale nesigure).
  • sanitize_text_field: Curăță textul de pe o singură linie primit de la utilizator: elimină HTML-ul, rândurile noi, tab-urile și spațiile în plus.