Ce face wp_kses
wp_kses() filtrează un text HTML după o listă albă: rămân doar etichetele și atributele pe care le permiți, iar celelalte sunt eliminate. Textul dintre etichetele eliminate rămâne (de exemplu din <script>alert(1)</script> rămâne alert(1), ca text inofensiv). Adresele din atribute sunt verificate față de protocoalele permise, implicit cele din wp_allowed_protocols().
Lista permisă este un tablou în care cheia e numele etichetei, iar valoarea e un tablou cu atributele permise: array( 'a' => array( 'href' => true ), 'strong' => array() ). În loc de tablou poți da numele unui context din wp_kses_allowed_html(): 'post', 'data', 'strip' (elimină tot HTML-ul) sau 'entities'.
wp_kses_post() (din WordPress 2.9.0) este scurtătura pentru wp_kses( $data, 'post' ): permite etichetele acceptate în conținutul unui articol (paragrafe, titluri, liste, linkuri, imagini). Numele se referă la articole (post content), nu la $_POST. Ambele funcții se folosesc la afișare sau la salvarea HTML-ului primit de la utilizatori.
Parametri
| Parametru | Descriere |
|---|---|
$content |
Textul HTML de filtrat. |
$allowed_html |
Tablou cu etichetele și atributele permise sau numele unui context ('post', 'data', 'strip', 'entities'). |
$allowed_protocols |
Protocoalele permise în adrese. Implicit (tablou gol) se folosește wp_allowed_protocols(). |
Ce returnează
Textul filtrat, doar cu HTML-ul permis.
Exemple
Exemplul 1: Doar bold și linkuri într-o descriere
Permitem <strong> și <a> cu href; paragraful, scriptul și atributul onclick dispar, textul rămâne.
<?php
$descriere = '<p>Cafeneaua <strong>Ana</strong> din <a href="https://exemplu.ro" onclick="fura()">Iași</a></p><script>alert(1)</script>';
$permise = array(
'strong' => array(),
'a' => array( 'href' => true ),
);
echo wp_kses( $descriere, $permise );
Ce afișează pagina
Cafeneaua <strong>Ana</strong> din <a href="https://exemplu.ro">Iași</a>alert(1)
Exemplul 2: Conținut de articol cu wp_kses_post()
wp_kses_post() păstrează titlul, paragraful și linkul, dar elimină atributul onmouseover.
<?php
$text = '<h3>Program</h3><p onmouseover="x()">Luni - vineri, 8 - 20. <a href="https://exemplu.ro/meniu">Vezi meniul</a></p>';
echo wp_kses_post( $text );
Ce afișează pagina
<h3>Program</h3><p>Luni - vineri, 8 - 20. <a href="https://exemplu.ro/meniu">Vezi meniul</a></p>
Greșeli frecvente
- Să permiți atribute precum
stylesauon*„ca să meargă”: deschizi exact breșa pe carewp_kses()trebuia să o închidă. - Să scrii lista permisă cu atributele ca valori într-un tablou simplu (
array( 'a' => array( 'href' ) )): atributele trebuie să fie chei,array( 'href' => true ). wp_kses_post()pentru texte simple, fără HTML: e mai lent și mai permisiv decât e nevoie; foloseșteesc_html()sausanitize_text_field().
Comenzi înrudite
esc_html: Escapează textul pentru afișare în HTML: transformă < > & și ghilimelele în entități, ca să nu fie interpretate ca cod.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.esc_url: Curăță o adresă pentru afișare în href sau src: respinge protocoalele nepermise și codifică & ca &.