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 (&, <, >, ", ') 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ámetro | Requerido | Descripción |
|---|---|---|
$string | Sí | La cadena que contiene las entidades HTML a decodificar. |
$flags | No | Una 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
$flagscambió en PHP 8.1 deENT_COMPAT | ENT_HTML401aENT_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()
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 < y >.
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:
| Flag | Efecto sobre las comillas |
|---|---|
ENT_QUOTES | Decodifica tanto las comillas dobles (") como las simples ('). |
ENT_COMPAT | Decodifica las comillas dobles; en el lado de la decodificación también decodifica las simples. |
ENT_NOQUOTES | Deja " y ' sin cambios. |
ENT_HTML5 | Trata la entrada como HTML5 (combínalo con un flag de comillas, p. ej. ENT_QUOTES | ENT_HTML5). |
Un punto de confusión habitual:
ENT_COMPATes el nombre asociado frecuentemente con "solo comillas dobles", pero esa distinción solo aplica en el lado de la codificación (htmlspecialchars()). Al decodificar,'se convierte tanto conENT_QUOTEScomo conENT_COMPAT. Para mantener las comillas simples codificadas, debes pasarENT_NOQUOTES.
¿Cómo usar PHP htmlspecialchars_decode()?
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 porhtmlspecialchars():&,<,>,"y'. Es rápida y predecible.html_entity_decode()decodifica la tabla completa de entidades HTML, incluyendo entidades con nombre como©, y€, así como referencias numéricas.
<?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() cuando solo necesites revertir una llamada a htmlspecialchars(). Recurre a html_entity_decode() cuando el texto pueda contener entidades con nombre como © o .
Advertencia de seguridad
La decodificación convierte <script> 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.