W3docs

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 (&amp;, &lt;, &gt;, &quot;, &#039;) 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
ParametroObbligatorioDescrizione
$stringLa stringa contenente le entità HTML da decodificare.
$flagsNoUna 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 da ENT_COMPAT | ENT_HTML401 a ENT_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()

php— editable, runs on the server

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 &lt; e &gt;.

Controllo delle virgolette con $flags

Il secondo argomento, $flags, determina quali entità virgolette vengono decodificate. Di seguito i valori più utilizzati:

FlagEffetto sulle virgolette
ENT_QUOTESDecodifica sia le virgolette doppie (&quot;) che quelle singole (&#039;).
ENT_COMPATDecodifica le virgolette doppie; lato decodifica converte anche le virgolette singole.
ENT_NOQUOTESLascia &quot; e &#039; invariati.
ENT_HTML5Tratta 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, &#039; viene convertito sia con ENT_QUOTES che con ENT_COMPAT. Per mantenere le virgolette singole codificate, è necessario passare ENT_NOQUOTES.

Come usare PHP htmlspecialchars_decode()?

php— editable, runs on the server

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 da htmlspecialchars(): &amp;, &lt;, &gt;, &quot; e &#039;. È veloce e prevedibile.
  • html_entity_decode() decodifica l'intera tabella delle entità HTML, incluse le entità con nome come &copy;, &nbsp; e &euro;, nonché i riferimenti numerici.
<?php
$text = "&copy; 2024 &amp; &lt;Acme&gt;";

// Leaves &copy; untouched — it is not one of the five special chars
echo htmlspecialchars_decode($text);   // &copy; 2024 & <Acme>
echo "\n";

// Decodes &copy; 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 &copy; o &nbsp;.

Nota di sicurezza

La decodifica trasforma &lt;script&gt; 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

Esercitazione

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