PHP 8.5.0 Alpha 1 available for testing

html_entity_decode

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

html_entity_decodeConvierte las entidades HTML a sus caracteres correspondientes

Descripción

html_entity_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ?string $encoding = null): string

html_entity_decode() es la función contraria de htmlentities(): convierte las entidades HTML de la cadena string a sus caracteres correspondientes.

De manera más explícita, esta función decodifica todas las entidades (incluyendo las entidades numéricas) que 1) son necesariamente válidas para el tipo de documento seleccionado - es decir, para XML, esta función no decodifica las entidades nombradas que pueden estar definidas en una DTD - y 2) cuyo carácter o caracteres están en el juego de caracteres codificado con la codificación elegida y están permitidos en el tipo de documento seleccionado. Todas las demás entidades se dejan tal cual.

Parámetros

string

La cadena de entrada.

flags

Una máscara de uno o varios flag siguientes, que especifican la forma en que deben ser gestionadas las comillas y qué tipo de documento debe ser utilizado. Por omisión, es ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Constantes disponibles para flags
Constante Descripción
ENT_COMPAT Convierte las comillas dobles e ignora las comillas simples.
ENT_QUOTES Convierte las comillas dobles y las comillas simples.
ENT_NOQUOTES No convierte ninguna comilla.
ENT_SUBSTITUTE Reemplaza las secuencias de código no válidas con un carácter de reemplazo Unicode U+FFFD (UTF-8) o &#FFFD; (de lo contrario) en lugar de devolver una cadena vacía.
ENT_HTML401 Gestiona el código como HTML 4.01.
ENT_XML1 Gestiona el código como XML 1.
ENT_XHTML Gestiona el código como XHTML.
ENT_HTML5 Gestiona el código como HTML 5.

encoding

Un argumento opcional que define la codificación empleada al convertir caracteres.

Si se omite, el valor predeterminado de encoding varía según la versión de PHP en uso. En PHP 5.6 y posterior, la opción de configuración default_charset se emplea como valor predeterminado. PHP 5.4 y 5.5 utilizarán UTF-8 como valor predeterminado. Las versiones anteriores de PHP emplean ISO-8859-1.

Aunque este argumento es técnicamente opcional, se recomienda especificar el valor correcto para el código si se utiliza PHP 5.5 o anterior, o si la opción de configuración default_charset podría estar establecida incorrectamente para la entrada dada.

Están soportados los siguientes juegos de caracteres:

Juegos de caracteres soportados
Juego de caracteres Alias Descripción
ISO-8859-1 ISO8859-1 Europeo occidental, Latin-1.
ISO-8859-5 ISO8859-5 Juego de caracteres cirílicos poco usado (Latin/Cyrillic).
ISO-8859-15 ISO8859-15 Europeo occidental, Latin-9. Añade el signo de euro, y letras del francés y finlandés ausentes en Latin-1 (ISO-8859-1).
UTF-8   Unicode de 8 bit multibyte compatible con ASCII.
cp866 ibm866, 866 Juego de caracteres cirílico específico de DOS.
cp1251 Windows-1251, win-1251, 1251 Juego de caracteres cirílico específico de Windows.
cp1252 Windows-1252, 1252 Juego de caracteres específico de Windows para Europa occidental.
KOI8-R koi8-ru, koi8r Ruso.
BIG5 950 Chino tradicional, usado principalmente en Taiwán.
GB2312 936 Chino simplificado, juego de caracteres estándar nacional.
BIG5-HKSCS   Big5 con extensiones de Hong Kong, chino tradicional.
Shift_JIS SJIS, SJIS-win, cp932, 932 Japonés
EUC-JP EUCJP, eucJP-win Japonés
MacRoman   Juego de caracteres que fue utilizado por Mac OS.
''   Un string vacío activa la detección desde la codificación del script (Zend multibyte), default_charset y la actual configuración regional (véase nl_langinfo() y setlocale()), en este orden. No se recomienda.

Nota: No se reconoce cualquier otro juego de caracteres. Será utilizada en su lugar la codificación por defecto y se emitirá una advertencia.

Valores devueltos

Devuelve la cadena decodificada.

Historial de cambios

Versión Descripción
8.1.0 flags cambió de ENT_COMPAT a ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.
8.0.0 encoding ahora puede ser nullable.

Ejemplos

Ejemplo #1 Decodificar entidades HTML

<?php
$orig
= 'J\'ai "sorti" le <strong>chien</strong> tout à l\'heure';
$a = htmlentities($orig);
$b = html_entity_decode($a);

echo
$a, PHP_EOL; // J'ai &quot;sorti&quot; le &lt;strong&gt;chien&lt;/strong&gt; tout &amp;agrave; l'heure
echo $b, PHP_EOL; // J'ai "sorti" le <strong>chien</strong> tout à l'heure

?>

Notas

Nota:

Podría preguntarse por qué trim(html_entity_decode('&nbsp;')); no reduce la cadena a la cadena vacía. Esto se debe a que la entidad &nbsp; no es un código ASCII 32 (que sería eliminado por trim()), sino un código ASCII 160 (0xa0) en la codificación por omisión ISO 8859-1.

Ver también

add a note

User Contributed Notes 5 notes

up
136
Martin
14 years ago
If you need something that converts &#[0-9]+ entities to UTF-8, this is simple and works:

<?php
/* Entity crap. /
$input = "Fovi&#269;";

$output = preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $input);

/* Plain UTF-8. */
echo $output;
?>
up
29
txnull
9 years ago
Use the following to decode all entities:
<?php html_entity_decode($string, ENT_QUOTES | ENT_XML1, 'UTF-8') ?>

I've checked these special entities:
- double quotes (&#34;)
- single quotes (&#39; and &apos;)
- non printable chars (e.g. &#13;)
With other $flags some or all won't be decoded.

It seems that ENT_XML1 and ENT_XHTML are identical when decoding.
up
7
aidan at php dot net
20 years ago
This functionality is now implemented in the PEAR package PHP_Compat.

More information about using this function without upgrading your version of PHP can be found on the below link:

http://pear.php.net/package/PHP_Compat
up
0
Benjamin
12 years ago
The following function decodes named and numeric HTML entities and works on UTF-8. Requires iconv.

function decodeHtmlEnt($str) {
$ret = html_entity_decode($str, ENT_COMPAT, 'UTF-8');
$p2 = -1;
for(;;) {
$p = strpos($ret, '&#', $p2+1);
if ($p === FALSE)
break;
$p2 = strpos($ret, ';', $p);
if ($p2 === FALSE)
break;

if (substr($ret, $p+2, 1) == 'x')
$char = hexdec(substr($ret, $p+3, $p2-$p-3));
else
$char = intval(substr($ret, $p+2, $p2-$p-2));

//echo "$char\n";
$newchar = iconv(
'UCS-4', 'UTF-8',
chr(($char>>24)&0xFF).chr(($char>>16)&0xFF).chr(($char>>8)&0xFF).chr($char&0xFF)
);
//echo "$newchar<$p<$p2<<\n";
$ret = substr_replace($ret, $newchar, $p, 1+$p2-$p);
$p2 = $p + strlen($newchar);
}
return $ret;
}
up
-1
Daniel A.
6 years ago
I wanted to use this function today and I found the documentation, especially about the flags, not particularly helpful.

Running the code below, for example, failed because the flag I used was the wrong one...

$string = 'Donna&#039;s Bakery';
$title = html_entity_decode($string, ENT_HTML401, 'UTF-8');
echo $title;

The correct flag to use in this case is ENT_QUOTES.

My understanding of the flag to use is the one that would correspond to the expected, converted outcome. So, ENT_QUOTES for a character that would be a single or double quote when converted... and so on.

Please help make the documentation a bit clearer.
To Top