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): stringEcco 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 (onull), 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()
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()?
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>italicEntrambe 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 astrip_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.