htmlspecialchars_decode()
Scopri la funzione PHP htmlspecialchars_decode(), che converte le entità HTML nei caratteri corrispondenti. Sintassi, flag e avvertenze di sicurezza.
La funzione htmlspecialchars_decode() esegue l'operazione inversa di htmlspecialchars(): converte le cinque entità HTML speciali (&, <, >, ", ') nei loro caratteri letterali corrispondenti (&, <, >, ", ').
In genere è necessaria quando una stringa è già stata codificata per la visualizzazione sicura in HTML e si vogliono recuperare i caratteri originali — ad esempio per memorizzare il testo originale, per confrontarlo con input non sottoposto a escape, o per passarlo a un sistema che si aspetta markup letterale.
Questa pagina tratta la sintassi, l'argomento $flags e il suo effetto sulle virgolette, la differenza rispetto a html_entity_decode() e una nota di sicurezza importante da conoscere prima di utilizzarla.
Sintassi
htmlspecialchars_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401): string| Parametro | Obbligatorio | Descrizione |
|---|---|---|
$string | Sì | La stringa contenente le entità HTML da decodificare. |
$flags | No | Una maschera di bit che controlla come vengono gestite le virgolette e il tipo di documento. |
La funzione restituisce la stringa decodificata. Vengono convertite solo le entità prodotte da htmlspecialchars() — per il set completo di entità HTML con nome e numeriche, usa invece html_entity_decode().
Nota: il valore predefinito di
$flagsè cambiato in PHP 8.1 daENT_COMPAT | ENT_HTML401aENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401. Gli esempi seguenti si comportano allo stesso modo su entrambe le versioni.
Esempio di base
Esempio di PHP htmlspecialchars_decode()
In questo esempio, abbiamo una variabile stringa $html_string contenente del codice HTML con entità. Usiamo la funzione htmlspecialchars_decode() per convertire le entità HTML nei caratteri corrispondenti.
L'output di questo codice sarà:
<h1>Hello World</h1>I caratteri < e > sono stati ripristinati da < e >.
Controllo delle virgolette con $flags
Il secondo argomento, $flags, determina quali entità virgolette vengono decodificate. Di seguito i valori più utilizzati:
| Flag | Effetto sulle virgolette |
|---|---|
ENT_QUOTES | Decodifica sia le virgolette doppie (") che quelle singole ('). |
ENT_COMPAT | Decodifica le virgolette doppie; lato decodifica converte anche le virgolette singole. |
ENT_NOQUOTES | Lascia " e ' invariati. |
ENT_HTML5 | Tratta l'input come HTML5 (combinare con un flag per le virgolette, es. ENT_QUOTES | ENT_HTML5). |
Un punto di confusione frequente:
ENT_COMPATè il nome spesso associato a "sole virgolette doppie", ma tale distinzione si applica solo al lato codifica (htmlspecialchars()). Durante la decodifica,'viene convertito sia conENT_QUOTESche conENT_COMPAT. Per mantenere le virgolette singole codificate, è necessario passareENT_NOQUOTES.
Come usare PHP htmlspecialchars_decode()?
In questo esempio, abbiamo una variabile stringa $html_string contenente del codice HTML con entità, inclusa una virgoletta singola codificata. Usiamo la funzione htmlspecialchars_decode() con il flag ENT_QUOTES per convertire le entità HTML nei caratteri corrispondenti e gestire la virgoletta singola.
L'output di questo codice sarà:
<p>I'm a paragraph</p>Il flag ENT_QUOTES ha ripristinato la virgoletta singola in I'm insieme alle parentesi angolari.
htmlspecialchars_decode() vs html_entity_decode()
Entrambe le funzioni convertono le entità in caratteri, ma gestiscono insiemi diversi:
htmlspecialchars_decode()decodifica solo le cinque entità create dahtmlspecialchars():&,<,>,"e'. È veloce e prevedibile.html_entity_decode()decodifica l'intera tabella delle entità HTML, incluse le entità con nome come©, e€, nonché i riferimenti numerici.
<?php
$text = "© 2024 & <Acme>";
// Leaves © untouched — it is not one of the five special chars
echo htmlspecialchars_decode($text); // © 2024 & <Acme>
echo "\n";
// Decodes © too
echo html_entity_decode($text); // © 2024 & <Acme>
?>Usa htmlspecialchars_decode() quando devi solo invertire una chiamata a htmlspecialchars(). Ricorri a html_entity_decode() quando il testo può contenere entità con nome come © o .
Nota di sicurezza
La decodifica trasforma <script> nuovamente in un tag <script> attivo. Non decodificare mai una stringa e stamparla in una pagina HTML senza ri-eseguire l'escape, altrimenti si riapre una falla di tipo cross-site scripting (XSS). Decodifica solo per l'archiviazione, il confronto o l'output non HTML — e richiama htmlspecialchars() prima di inviare qualsiasi cosa al browser.
Funzioni correlate
htmlspecialchars()— la controparte di codifica di questa funzione.html_entity_decode()— decodifica tutte le entità HTML, non solo le cinque speciali.htmlentities()— codifica tutti i caratteri applicabili in entità.strip_tags()— rimuove completamente i tag HTML invece di decodificarli.