W3docs

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 &lt;, &amp; o &copy;) 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ámetroObligatorioDescripción
$stringLa cadena de entrada que contiene las entidades HTML a decodificar.
$flagsNoUna máscara de bits que controla qué comillas se decodifican y qué tipo de documento se asume.
$encodingNoLa 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

php— editable, runs on the server

Las entidades &lt; y &gt; 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:

BanderaDecodifica
ENT_COMPATSolo comillas dobles
ENT_QUOTESComillas simples y dobles
ENT_NOQUOTESNingú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 (&#039; / &apos;):

php— editable, runs on the server

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":

php— editable, runs on the server

ENT_HTML5 permite que PHP reconozca el conjunto completo de entidades nombradas de HTML5, por lo que &eacute; y &amp; 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() — invierte htmlspecialchars(); más rápida que html_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 &copy; o &eacute;; recurre a htmlspecialchars_decode() cuando la salida siempre se haya producido con htmlspecialchars().

Práctica

Práctica
¿Qué hace la función `html_entity_decode()` en PHP?
¿Qué hace la función `html_entity_decode()` en PHP?
Was this page helpful?