PHP: eliminarea etichetelor HTML dintr-un text folosind strip_tags()

Atunci când prelucrezi date trimise de utilizatori prin formulare web (de exemplu, printr-un câmp de tip <textarea>), este esențial să elimini orice script JavaScript potențial periculos sau etichete HTML nedorite înainte de a salva ori afișa informația.

În PHP, funcția standard pusă la dispoziție pentru curățarea codului HTML este strip_tags(). Cu toate acestea, în funcție de cerințe, există situații când o filtrare avansată cu expresii regulate este utilă.

Utilizarea funcției native strip_tags()

Cea mai rapidă și simplă metodă de a elimina etichetele HTML dintr-un șir de caractere este funcția nativă strip_tags():

$continut_brut = "<p>Acesta este un <strong>text formatat</strong> cu <a href='#'>link</a>.</p>";
$text_curat = strip_tags($continut_brut);

echo $text_curat;
// Rezultat: "Acesta este un text formatat cu link."

Dacă dorești să permiți anumite etichete (de exemplu doar <strong> sau <b>), poți specifica etichetele permise ca al doilea argument:

$text_permis = strip_tags($continut_brut, '<strong><b>');

Filtrare avansată cu expresii regulate (eliminare scripturi și stiluri)

Deși strip_tags() îndepărtează etichetele în sine, dacă un utilizator introduce blocuri complete de tip <script>alert('test');</script> sau <style>body {display:none;}</style>, conținutul dintre etichete poate rămâne vizibil în text. Pentru a șterge complet atât etichetele, cât și codul JavaScript sau stilurile CSS incluse, putem construi o funcție personalizată bazată pe preg_replace():

function strings_html2txt($document) {
    $search = array(
        '@<script[^>]*?>.*?</script>@si',  // Elimină complet scripturile JavaScript
        '@<style[^>]*?>.*?</style>@siU',   // Elimină stilurile CSS interne
        '@<[\/\!]*?[^<>]*?>@si'            // Elimină orice etichetă HTML rămasă
    );
    $text = preg_replace($search, '', $document);
    return trim($text);
}

Cum funcționează această funcție:

  • Primul tipar identifică și șterge întregul bloc <script>...</script>, inclusiv codul executabil din interior;
  • Al doilea tipar elimină blocurile <style>...</style>;
  • Al treilea tipar șterge orice altă etichetă HTML sau comentariu XML rămas în șirul de caractere;
  • Funcția returnează textul simplu, curat și pregătit pentru stocare sau procesare.

Notă de securitate: Pentru afișarea în siguranță în pagină a datelor preluate de la utilizatori și prevenirea atacurilor de tip XSS (Cross-Site Scripting), folosește întotdeauna și funcția htmlspecialchars().

1 comentariu

Lasă un comentariu