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 <, & devine &, ghilimelele devin " și '. 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 & Mihai <b>Popescu</b></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><script>alert("hack")</script></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: pentruvalue="..."eesc_attr(), pentruhrefeesc_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ștewp_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 &.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.