W3docs

strip_tags()

La funzione strip_tags() in PHP rimuove i tag HTML e PHP da una stringa, lasciando solo il contenuto testuale semplice.

Introduzione

La funzione strip_tags() in PHP rimuove i tag HTML, XML e PHP da una stringa, lasciando solo il contenuto testuale semplice. Viene comunemente usata per trasformare contenuti inviati dagli utenti o testo formattato in testo pulito e privo di tag — ad esempio, quando si genera un breve riassunto, il corpo di un'email in formato testo, o una versione sicura da memorizzare di un commento.

Questo articolo tratta la sintassi, i parametri obbligatori e opzionali, esempi pratici, la forma con array aggiunta in PHP 7.4 e le importanti avvertenze di sicurezza da comprendere prima di affidarsi a questa funzione.

Capire la funzione strip_tags()

La funzione strip_tags() analizza la stringa di input ed elimina tutto ciò che assomiglia a un tag HTML/XML (testo tra < e >) nonché i tag PHP (<?php ... ?>). Il testo che si trova tra i tag viene conservato. La sintassi è la seguente:

Sintassi PHP di strip_tags()

strip_tags(string $string, array|string|null $allowed_tags = null): string

Ecco cosa fa ciascun parametro:

  • $string — la stringa di input da cui rimuovere i tag. È l'unico parametro obbligatorio.
  • $allowed_tags (opzionale) — un elenco di tag che non devono essere rimossi. Può essere passato come stringa di nomi di tag ("<a><b>") o, a partire da PHP 7.4, come array (["a", "b"]). Se omesso (o null), tutti i tag vengono rimossi.

La funzione restituisce la stringa risultante con tutti i tag non consentiti rimossi. Non modifica mai la stringa originale.

Attenzione: i commenti (<!-- ... -->) e i blocchi <?php ... ?> vengono sempre rimossi e non possono essere aggiunti alla lista dei tag consentiti.

Esempio di utilizzo

Vediamo un esempio per comprendere l'utilizzo della funzione strip_tags() in PHP:

Esempio di PHP strip_tags()

php— editable, runs on the server

Nell'esempio precedente, utilizziamo la funzione strip_tags() per rimuovere tutti i tag HTML e PHP dalla stringa. La stringa risultante Hello WorldThis is a paragraph. viene quindi visualizzata sullo schermo tramite l'istruzione echo.

Utilizzo del parametro $allowable_tags

Vediamo un altro esempio per capire come il parametro $allowable_tags può essere usato con la funzione strip_tags():

Come usare PHP strip_tags()?

php— editable, runs on the server

Nell'esempio precedente, utilizziamo la funzione strip_tags() per rimuovere i tag HTML e PHP dalla stringa. Specifichiamo il tag <a> come tag consentito tramite il parametro $allowed_tags. Di conseguenza, la funzione rimuove i tag <h1> e <p> ma conserva il loro contenuto testuale, mantenendo intatti il tag <a> e il suo contenuto. La stringa risultante Hello WorldThis is a paragraph.<a href='https://www.example.com'>Example link</a> viene quindi visualizzata sullo schermo tramite l'istruzione echo.

Passare i tag consentiti come array (PHP 7.4+)

A partire da PHP 7.4 è possibile passare i tag consentiti come array invece che come stringa. Questo approccio è più leggibile e meno soggetto a errori rispetto alla costruzione di una stringa in stile "<a><b>":

<?php

$str = "<p>Hi</p><b>bold</b><i>italic</i>";

// String form (any PHP version)
echo strip_tags($str, "<p><b>"); // <p>Hi</p><b>bold</b>italic

echo "\n";

// Array form (PHP 7.4 and newer) — equivalent result
echo strip_tags($str, ["p", "b"]); // <p>Hi</p><b>bold</b>italic

Entrambe le chiamate mantengono i tag <p> e <b> e rimuovono il tag <i>, stampando <p>Hi</p><b>bold</b>italic su ciascuna riga.

Nota: strip_tags() non convalida l'HTML. Rimuove semplicemente i tag in base alla lista dei tag consentiti fornita, il che potrebbe lasciare markup malformato o tag non chiusi nell'output.

Sicurezza: strip_tags() non è sufficiente per fermare gli attacchi XSS

Un malinteso comune è che strip_tags() renda sicuro l'input degli utenti per la visualizzazione. Non è così. La funzione rimuove solo i tag interi — non sanifica gli attributi di nessun tag che si consente:

<?php

$input = '<a href="javascript:alert(1)" onclick="steal()">click me</a>';

// The <a> tag survives, attributes and all
echo strip_tags($input, "<a>");
// <a href="javascript:alert(1)" onclick="steal()">click me</a>

Gli attributi pericolosi href e onclick passano direttamente attraverso la funzione. Per l'output che verrà renderizzato come HTML, utilizzare htmlspecialchars() per eseguire l'escape del testo, o un sanitizzatore HTML dedicato come HTML Purifier quando è necessario consentire alcuni markup in modo sicuro. Utilizzare strip_tags() per produrre testo semplice, non per produrre HTML sicuro.

Casi d'uso comuni

  • Anteprime in testo semplice: generare uno snippet privo di tag di un articolo per i risultati di ricerca o le viste elenco.
  • Corpo delle email in testo semplice: rimuovere l'HTML prima di inviare l'alternativa testuale di un'email.
  • Pulizia dell'input degli utenti che non dovrebbe mai contenere markup, come un nome visualizzato o una query di ricerca.

Funzioni correlate

  • htmlspecialchars() — esegue l'escape di <, >, & e virgolette in modo che il markup venga renderizzato come testo anziché essere rimosso.
  • htmlentities() — converte tutti i caratteri applicabili in entità HTML.
  • trim() — rimuove gli spazi bianchi circostanti, spesso abbinato a strip_tags() per rifinire il risultato.

Conclusione

La funzione strip_tags() è uno strumento semplice per estrarre testo semplice da stringhe contenenti markup HTML o PHP. Passare una lista di tag consentiti (come stringa, o come array in PHP 7.4+) quando è necessario mantenere tag specifici, e ricordare che la funzione rimuove solo i tag — non sanifica gli attributi, quindi non è un sostituto per il corretto escape dell'output. Utilizzarla per produrre testo semplice, e ricorrere a htmlspecialchars() o a un vero sanitizzatore quando si ha bisogno di HTML sicuro.

Pratica

Pratica
Qual è lo scopo della funzione strip_tags() in PHP?
Qual è lo scopo della funzione strip_tags() in PHP?
Was this page helpful?