PHP 8.4.2 Released!

html_entity_decode

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

html_entity_decodeПреобразовывает HTML-сущности в символы

Описание

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

Функция html_entity_decode() выполняет преобразование обратное функции htmlentities(), разница в том, что эта функция наоборот — преобразовывает HTML-сущности в строке string в символы.

Точнее, эта функция декодирует сущности (включая числовые), которые а) допускает тип документа — то есть, для XML-документов функция не декодирует именованные сущности, которые определяет схема DTD и б) символ или символы которых входят в кодированный набор символов, который связан с выбранной кодировкой, и которые разрешает выбранный тип документа. Остальные сущности функция не изменяет.

Список параметров

string

Входная строка.

flags

Битовая маска из следующих флагов, которые определяют, как обрабатывать кавычки и какой тип документа использовать. Маска по умолчанию: ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Константы flags
Имя константы Описание
ENT_COMPAT Преобразовывает двойные кавычки, одинарные кавычки не изменяются.
ENT_QUOTES Преобразовывает как двойные, так и одинарные кавычки.
ENT_NOQUOTES Оставляет без изменения как двойные, так и одинарные кавычки.
ENT_SUBSTITUTE Заменяет неправильные последовательности кодовых единиц символом замены Юникода вместо возврата пустой строки: U+FFFD для строк в кодировке UTF-8 и &#FFFD; для строк в других кодировках.
ENT_HTML401 Обрабатывает код в соответствии со стандартом HTML 4.01.
ENT_XML1 Обрабатывает код по правилам стандарта XML 1.
ENT_XHTML Обрабатывает код по правилам стандарта XHTML.
ENT_HTML5 Обрабатывает код по правилам стандарта HTML 5.

encoding

Необязательный аргумент, который определяет кодировку для преобразования символов.

Функция примет за значение по умолчанию для параметра encoding значение опции конфигурации default_charset, если параметр опустили.

Хотя технически этот аргумент необязателен, настоятельно рекомендуется указать правильное значение для кода, на случай если значение опции default_charset окажется неправильным для входных данных.

Функция поддерживает следующие кодировки:

Кодировки, которые поддерживает функция
Кодировка Псевдонимы Описание
ISO-8859-1 ISO8859-1 Западно-Европейская кодировка с набором символов Latin-1.
ISO-8859-5 ISO8859-5 Кириллическая кодировка с набором символов Latin/Cyrillic; применяют редко.
ISO-8859-15 ISO8859-15 Западно-Европейская кодировка с набором символов Latin-9. Добавляет к набору символов Latin-1 кодировки ISO-8859-1 знак евро, французские и финские буквы.
UTF-8   ASCII-совместимая многобайтовая 8-битная кодировка Unicode.
cp866 ibm866, 866 Кириллическая кодировка, которую применяют в семействе операционных систем DOS.
cp1251 Windows-1251, win-1251, 1251 Кириллическая кодировка, которую применяют в операционных системах Windows.
cp1252 Windows-1252, 1252 Западно-Европейская кодировка, которую применяют в операционных системах Windows.
KOI8-R koi8-ru, koi8r Русская кодировка.
BIG5 950 Кодировка с набором символов Traditional Chinese (Традиционный китайский), которую применяют в основном на Тайване.
GB2312 936 Стандартная национальная кодировка с набором символов Simplified Chinese (Упрощённый китайский).
BIG5-HKSCS   Кодировка Big5 с расширениями для Гонконга с набором символов Traditional Chinese (Традиционный китайский).
Shift_JIS SJIS, SJIS-win, cp932, 932 Японская кодировка.
EUC-JP EUCJP, eucJP-win Японская кодировка.
MacRoman   Кодировка, которую использовала операционная система Mac OS.
''   Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), директивы default_charset и текущей локали (смотрите описание функций nl_langinfo() и setlocale()), в перечисленном порядке. Не рекомендуется использовать.

Замечание: Другие кодировки функция не распознаёт. Вместо других кодировок функция будет использовать кодировку по умолчанию и выдаст предупреждение.

Возвращаемые значения

Функция возвращает декодированную строку.

Список изменений

Версия Описание
8.1.0 Значение по умолчанию для параметра flags изменили с ENT_COMPAT на ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.
8.0.0 Теперь параметр encoding принимает значение null.

Примеры

Пример #1 Декодирование 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

?>

Примечания

Замечание:

Кажется странным, что результатом вызова функции trim(html_entity_decode('&nbsp;')); не становится пустая строка. Причина в том, что сущность «&nbsp;» преобразовывается не в символ с ASCII-кодом 32, который функция trim() удаляет, а в символ с ASCII-кодом 160 (0xa0) в принимаемой по умолчанию кодировке ISO-8859-1.

Смотрите также

  • htmlentities() - Преобразовывает возможные символы в HTML-сущности
  • htmlspecialchars() - Преобразовывает специальные символы в HTML-сущности
  • get_html_translation_table() - Возвращает таблицу преобразований, используемую функциями htmlspecialchars и htmlentities
  • urldecode() - Декодирование URL-кодированной строки

Добавить

Примечания пользователей 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