PHP 8.4.2 Released!

html_entity_decode

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

html_entity_decodeConverte entidades HTML aos seus caracteres correspondentes

Descrição

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

html_entity_decode() é oposta a htmlentities() porque converte entidades HTML na string aos seus caracteres correspondentes.

Mais precisamente, esta função decodifica todas as entidades (incluindo as numéricas): a) que são necessariamente válidas para o tipo de documento escolhido, isto é, para XML esta função não decodifica entidades nomeadas que possam ser definidas em algum DTD; e b) cujos caracteres estejam no conjunto de caracteres da codificação associados com a codificação escolhida e sejam permitidos no tipo de documento escolhido. Todas as outras entidades ficarão inalteradas.

Parâmetros

string

A string de entrada.

flags

Uma máscara de bits de uma ou mais das opções a seguir, que especificam como lidar com aspas e que tipos de documentos são usados. O padrão é ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Constantes disponíveis para flags
Nome da Constante Descrição
ENT_COMPAT Converte aspas duplas e não converte aspas simples.
ENT_QUOTES Converte tanto aspas duplas quanto simples.
ENT_NOQUOTES Não converte aspas duplas ou simples.
ENT_SUBSTITUTE Substitui sequências de unidade de código inválidas com um Caractere de Substituição Unicode U+FFFD (UTF-8) ou � ao invés de retornar uma string vazia.
ENT_HTML401 Lida com o código como HTML 4.01.
ENT_XML1 Lida com o código como XML 1.
ENT_XHTML Lida com o código como XHTML.
ENT_HTML5 Lida com o código como HTML 5.

encoding

Um argumento opcional que define a codificação usada na conversão de caracteres.

Se omitido, encoding assume como padrão o valor da opção de configuração default_charset .

Embora este argumento seja tecnicamente opcional, especificar o valor correto para o código é altamente recomendável se a opção de configuração default_charset puder ser definida incorretamente para a entrada fornecida.

Os seguintes conjuntos de caracteres são suportados:

Conjuntos de caracteres suportados
Conjunto de caracteres Apelidos Descrição
ISO-8859-1 ISO8859-1 Western European, Latin-1.
ISO-8859-5 ISO8859-5 Conjunto de caracteres cirílicos pouco usado (Latim/Cirílico).
ISO-8859-15 ISO8859-15 Western European, Latin-9. Adiciona o símbolo do Euro, letras Francesas e Filandesas faltando no Latin-1 (ISO-8859-1).
UTF-8   Código de multi-byte 8-bit Unicode compatível com ASCII.
cp866 ibm866, 866 Conjunto de caracteres do DOS específico para o Russo.
cp1251 Windows-1251, win-1251, 1251 Conjunto de caracteres do Windows específico para o Russo.
cp1252 Windows-1252, 1252 Conjunto de caracteres do Windows específico para a Europa Ocidental.
KOI8-R koi8-ru, koi8r Russo.
BIG5 950 Chinês Tradicional, usado principalmente em Taiwan.
GB2312 936 Chins Simplificado, conjunto de caracteres padrão nacional.
BIG5-HKSCS   Big5 com extenções de Hong Kong, Chinês Tradicional.
Shift_JIS SJIS, SJIS-win, cp932, 932 Japonês
EUC-JP EUCJP, eucJP-win Japonês
MacRoman   Conjunto de caracteres que era usado pelo Mac OS.
''   Uma string vazia ativa a detecção a partir de codificação de script (multibyte Zend), conjunto padrão de caracteres e localidade atual (consulte nl_langinfo() e setlocale()), nesta ordem. Não recomendado.

Nota: Nenhum outro conjunto de caracteres é reconhecido. A codificação padrão será usada no lugar e um alerta será emitido.

Valor Retornado

Retorna a string decodificada.

Registro de Alterações

Versão Descrição
8.1.0 O padrão de flags mudou de ENT_COMPAT para ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.
8.0.0 encoding agora pode ser nulo.

Exemplos

Exemplo #1 Decodificando entidades HTML

<?php
$orig
= "I'll \"walk\" the <b>dog</b> now";

$a = htmlentities($orig);

$b = html_entity_decode($a);

echo
$a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

echo $b; // I'll "walk" the <b>dog</b> now
?>

Notas

Nota:

Pode-se perguntar por que trim(html_entity_decode('&nbsp;')); não reduz a string a uma string vazia, e isso acontece porque a entidades '&nbsp;' não tem código ASCII 32 (que é o código removido por trim()) mas sim 160 (0xa0) na codificação padrão ISO 8859-1.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 5 notes

up
130
Martin
13 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
28
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
6
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
-1
Benjamin
11 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
-3
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