sanitize_text_field în WordPress

Securitate WordPress 2.9

Curăță textul de pe o singură linie primit de la utilizator: elimină HTML-ul, rândurile noi, tab-urile și spațiile în plus.

Sintaxă
sanitize_text_field( string $str ): string

Ce face sanitize_text_field

sanitize_text_field() (din WordPress 2.9.0) se folosește la intrare, înainte să salvezi un text simplu (nume, oraș, telefon). Verifică UTF-8 invalid, transformă un < singur în entitate, elimină toate etichetele HTML, elimină rândurile noi, tab-urile și spațiile în plus și elimină caracterele codificate cu procent (de forma %20).

Datele din $_POST și $_GET sunt „slashed” de WordPress (au backslash în fața ghilimelelor), de aceea le treci întâi prin wp_unslash() (din 3.6.0): sanitize_text_field( wp_unslash( $_POST['nume'] ) ).

Pentru texte pe mai multe rânduri (un mesaj dintr-un textarea) există sanitize_textarea_field() (din 4.7.0), care păstrează rândurile noi. Sanitizarea nu înlocuiește escaparea: la afișare folosești tot esc_html() sau esc_attr().

Parametri

Parametru Descriere
$str Textul de curățat.

Ce returnează

Textul curățat (șir).

Exemple

Exemplul 1: Curățarea unui nume din formular

Spațiile de la margini, rândul nou și eticheta <b> dispar; rămâne numele simplu.

<?php
$intrare = "  Ana <b>Popescu</b>\n  ";
var_dump( sanitize_text_field( $intrare ) );

Ce afișează pagina

string(11) "Ana Popescu"

Exemplul 2: Salvarea unui formular de rezervare

Câmpul de o linie trece prin sanitize_text_field(), mesajul prin sanitize_textarea_field(), după wp_unslash().

<?php
function dex_salveaza_rezervare() {
    check_admin_referer( 'dex_rezervare' );

    $nume   = sanitize_text_field( wp_unslash( $_POST['nume'] ?? '' ) );
    $mesaj  = sanitize_textarea_field( wp_unslash( $_POST['mesaj'] ?? '' ) );

    wp_insert_post( array(
        'post_type'    => 'dex_rezervare',
        'post_title'   => $nume,
        'post_content' => $mesaj,
        'post_status'  => 'private',
    ) );

    wp_safe_redirect( home_url( '/multumim/' ) );
    exit;
}
add_action( 'admin_post_nopriv_dex_rezervare', 'dex_salveaza_rezervare' );
add_action( 'admin_post_dex_rezervare', 'dex_salveaza_rezervare' );

Greșeli frecvente

  • sanitize_text_field() pe un textarea: rândurile noi se pierd și mesajul ajunge pe o singură linie. Folosește sanitize_textarea_field().
  • Să uiți wp_unslash(): în textul salvat apar backslash-uri în fața ghilimelelor (Cafeneaua \"Ana\").
  • Să consideri textul sanitizat „sigur” și să îl afișezi fără escapare: escaparea la afișare rămâne obligatorie.
  • Să o folosești pentru emailuri, adrese sau numere: există funcții dedicate (sanitize_email(), sanitize_url(), absint()).

Comenzi înrudite

  • esc_html: Escapează textul pentru afișare în HTML: transformă < > & și ghilimelele în entități, ca să nu fie interpretate ca cod.
  • wp_kses: Păstrează doar etichetele și atributele HTML permise și elimină restul (scripturi, atribute on*, protocoale nesigure).
  • wp_nonce_field: Adaugă într-un formular un câmp ascuns cu un nonce, un cod care dovedește că cererea pornește chiar de pe site-ul tău.
  • check_admin_referer: Verifică nonce-ul unei cereri din administrare și oprește execuția cu o pagină de eroare dacă e invalid sau a expirat.