W3docs

htmlspecialchars_decode()

Artículo sobre la función PHP htmlspecialchars_decode(), usada para convertir entidades HTML en sus caracteres correspondientes.

La función htmlspecialchars_decode() hace lo contrario de htmlspecialchars(): convierte las cinco entidades HTML especiales (&amp;, &lt;, &gt;, &quot;, &#039;) de vuelta a sus caracteres literales (&, <, >, ", ').

Normalmente se necesita cuando una cadena ya ha sido codificada para su visualización segura en HTML y se quieren recuperar los caracteres originales — por ejemplo, para almacenar el texto original, compararlo con una entrada sin escapar, o pasarlo a un sistema que espera marcado literal.

Esta página cubre la sintaxis, el argumento $flags y su efecto sobre las comillas, la diferencia con html_entity_decode(), y una advertencia de seguridad que debes conocer antes de utilizarla.

Sintaxis

htmlspecialchars_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401): string
ParámetroRequeridoDescripción
$stringLa cadena que contiene las entidades HTML a decodificar.
$flagsNoUna máscara de bits que controla cómo se gestionan las comillas y el tipo de documento.

La función devuelve la cadena decodificada. Solo se convierten las entidades producidas por htmlspecialchars() — para el conjunto completo de entidades HTML con nombre y numéricas, usa html_entity_decode() en su lugar.

Nota: el valor predeterminado de $flags cambió en PHP 8.1 de ENT_COMPAT | ENT_HTML401 a ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401. Los ejemplos de abajo se comportan de forma idéntica en ambos.

Ejemplo básico

Ejemplo de PHP htmlspecialchars_decode()

php— editable, runs on the server

En este ejemplo, tenemos una variable de cadena $html_string que contiene código HTML con entidades. Usamos la función htmlspecialchars_decode() para convertir las entidades HTML en sus caracteres correspondientes.

La salida de este código será:

<h1>Hello World</h1>

Los caracteres < y > fueron restaurados a partir de &lt; y &gt;.

Controlar las comillas con $flags

El segundo argumento, $flags, determina qué entidades de comillas se decodifican. Estos son los valores que se usan con más frecuencia:

FlagEfecto sobre las comillas
ENT_QUOTESDecodifica tanto las comillas dobles (&quot;) como las simples (&#039;).
ENT_COMPATDecodifica las comillas dobles; en el lado de la decodificación también decodifica las simples.
ENT_NOQUOTESDeja &quot; y &#039; sin cambios.
ENT_HTML5Trata la entrada como HTML5 (combínalo con un flag de comillas, p. ej. ENT_QUOTES | ENT_HTML5).

Un punto de confusión habitual: ENT_COMPAT es el nombre asociado frecuentemente con "solo comillas dobles", pero esa distinción solo aplica en el lado de la codificación (htmlspecialchars()). Al decodificar, &#039; se convierte tanto con ENT_QUOTES como con ENT_COMPAT. Para mantener las comillas simples codificadas, debes pasar ENT_NOQUOTES.

¿Cómo usar PHP htmlspecialchars_decode()?

php— editable, runs on the server

En este ejemplo, tenemos una variable de cadena $html_string que contiene código HTML con entidades, incluyendo una comilla simple codificada. Usamos la función htmlspecialchars_decode() con el flag ENT_QUOTES para convertir las entidades HTML en sus caracteres correspondientes y gestionar la comilla simple.

La salida de este código será:

<p>I'm a paragraph</p>

El flag ENT_QUOTES restauró la comilla simple en I'm junto con los signos de ángulo.

htmlspecialchars_decode() vs html_entity_decode()

Ambas funciones convierten entidades de vuelta a caracteres, pero gestionan conjuntos distintos:

  • htmlspecialchars_decode() decodifica únicamente las cinco entidades creadas por htmlspecialchars(): &amp;, &lt;, &gt;, &quot; y &#039;. Es rápida y predecible.
  • html_entity_decode() decodifica la tabla completa de entidades HTML, incluyendo entidades con nombre como &copy;, &nbsp; y &euro;, así como referencias numéricas.
<?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() cuando solo necesites revertir una llamada a htmlspecialchars(). Recurre a html_entity_decode() cuando el texto pueda contener entidades con nombre como &copy; o &nbsp;.

Advertencia de seguridad

La decodificación convierte &lt;script&gt; de vuelta en una etiqueta <script> activa. Nunca decodifiques una cadena y la imprimas en una página HTML sin volver a escaparla, o reabrirás un agujero de cross-site scripting (XSS). Decodifica para almacenamiento, comparación o salida que no sea HTML — y llama a htmlspecialchars() de nuevo antes de enviar cualquier cosa de vuelta al navegador.

Funciones relacionadas

  • htmlspecialchars() — la contraparte de codificación de esta función.
  • html_entity_decode() — decodifica todas las entidades HTML, no solo las cinco especiales.
  • htmlentities() — codifica todos los caracteres aplicables en entidades.
  • strip_tags() — elimina las etiquetas HTML por completo en lugar de decodificarlas.

Práctica

Práctica
¿Cuál es el propósito de la función htmlspecialchars_decode() en PHP?
¿Cuál es el propósito de la función htmlspecialchars_decode() en PHP?
Was this page helpful?