html_entity_decode()
Artículo sobre la función PHP html_entity_decode(), que convierte entidades HTML en sus caracteres correspondientes. Función útil para decodificar contenido codificado.
La función PHP html_entity_decode() convierte entidades HTML (como <, & o ©) de nuevo a sus caracteres correspondientes (<, &, ©). Es la función inversa de htmlentities(), y es la que se utiliza cuando se necesita convertir HTML ya codificado de vuelta a texto legible — por ejemplo, cuando se leen datos almacenados en formato codificado, o cuando se procesa la salida de un sistema que escapó su HTML.
Esta página explica la sintaxis, cada parámetro, las banderas que controlan cómo se manejan las comillas y los errores más comunes (especialmente los relacionados con la seguridad).
Sintaxis
html_entity_decode(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null
): string| Parámetro | Obligatorio | Descripción |
|---|---|---|
$string | Sí | La cadena de entrada que contiene las entidades HTML a decodificar. |
$flags | No | Una máscara de bits que controla qué comillas se decodifican y qué tipo de documento se asume. |
$encoding | No | La codificación de caracteres de la entrada. Por defecto usa la configuración ini default_charset (UTF-8 en PHP moderno). |
La función devuelve la cadena decodificada. Desde PHP 8.1, el valor por defecto de $flags es ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401; las versiones anteriores usaban ENT_COMPAT | ENT_HTML401 por defecto.
Ejemplo básico
Las entidades < y > se convierten de nuevo en < y >, por lo que la salida es:
<h1>Hello World</h1>Controlar las comillas con $flags
El parámetro $flags determina cómo se tratan las comillas simples y dobles:
| Bandera | Decodifica |
|---|---|
ENT_COMPAT | Solo comillas dobles |
ENT_QUOTES | Comillas simples y dobles |
ENT_NOQUOTES | Ningún tipo de comillas |
Añade ENT_HTML401, ENT_HTML5, ENT_XML1 o ENT_XHTML para seleccionar el conjunto de entidades, y ENT_SUBSTITUTE/ENT_IGNORE para controlar cómo se manejan las secuencias de bytes inválidas. Usa ENT_QUOTES cuando la entrada pueda contener comillas simples codificadas (' / '):
Con ENT_QUOTES, tanto las etiquetas como la comilla simple codificada se restauran:
<p>I'm a paragraph</p>Especificar la codificación de caracteres
El tercer parámetro, $encoding, indica a PHP cómo interpretar los bytes de entrada. Su valor predeterminado es la configuración ini default_charset. Pásalo de forma explícita cuando no puedas depender de ese valor predeterminado — generalmente "UTF-8":
ENT_HTML5 permite que PHP reconozca el conjunto completo de entidades nombradas de HTML5, por lo que é y & se decodifican a:
Café & Co.Seguridad: no decodificar antes de generar la salida
html_entity_decode() es lo contrario de escapar. Decodificar contenido proporcionado por el usuario y luego imprimirlo en una página reintroduce cualquier etiqueta <script> o atributo que el escapado eliminó, creando una vulnerabilidad XSS. Decodifica solo cuando necesites los caracteres en bruto para propósitos no HTML (registros, comparaciones, generar una versión de texto plano, construir un PDF, etc.). Cuando hagas echo en HTML, mantén los datos escapados.
Funciones relacionadas
htmlentities()— la función inversa: convierte caracteres en entidades HTML.htmlspecialchars()— escapa únicamente los cinco caracteres especiales de HTML (<,>,&,",').htmlspecialchars_decode()— inviertehtmlspecialchars(); más rápida quehtml_entity_decode()cuando solo se necesita recuperar esos cinco caracteres.
html_entity_decode() maneja el conjunto completo de entidades nombradas, así que úsala cuando la entrada pueda contener entidades como © o é; recurre a htmlspecialchars_decode() cuando la salida siempre se haya producido con htmlspecialchars().