html_entity_decode
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
html_entity_decode — Преобразует все HTML-сущности в соответствующие символы
Описание
$string
[, int $flags
= ENT_COMPAT | ENT_HTML401
[, string $encoding
= ini_get("default_charset")
]] )
html_entity_decode() является противоположностью функции
htmlentities(). Она преобразует все HTML-сущности в строке
string
в соответствующие символы.
Если быть точнее, то эта функция преобразует все сущности (в том числе все числовые сущности), которые а) обязательно верны для выбранного типа документа - то есть, для XML, эта функция не преобразует именованные сущности, которые могут быть определены в каком-нибудь DTD - и б) их символы находятся в кодировке соответвующей с выбранной кодировкой и разрешены в выбранном типе документа. Все другие сущности остаются без изменений. набор, связанный с выбранной кодировкой и разрешается в выбранном тип документа. Все другие субъекты, которые оставили как есть.
Список параметров
-
string
-
Входная строка.
-
flags
-
Битовая маска, состоящая из одного или более флагов, которые указывают как обращаться с кавычками и какой тип документа использовать. По умолчанию маска принимает значение ENT_COMPAT | ENT_HTML401.
Константы flags
Имя константы Описание ENT_COMPAT
Преобразуются двойные кавычки, одиночные остаются без изменений. ENT_QUOTES
Преобразуются и двойные, и одиночные кавычки. ENT_NOQUOTES
И двойные, и одиночные кавычки остаются без изменений. ENT_HTML401
Обрабатывать код как HTML 4.01. ENT_XML1
Обрабатывать код как XML 1. ENT_XHTML
Обрабатывать код как XHTML. ENT_HTML5
Обрабатывать код как HTML 5. -
encoding
-
Необязательный аргумент определяющий кодировку, используемую при конвертации симоволов.
Если не указан, то значением по умолчанию для
encoding
зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset. В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1.Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, если вы используете PHP 5.5 или выше, или если ваша опция конфигурации 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 8-битная Unicode, совместимая с ASCII. cp866 ibm866, 866 Кириллическая кодировка, применяемая в DOS. cp1251 Windows-1251, win-1251, 1251 Кириллическая кодировка, применяемая в Windows. cp1252 Windows-1252, 1252 Западно-европейская кодировка, применяемая в Windows. KOI8-R koi8-ru, koi8r Русская кодировка. BIG5 950 Традиционный китайский, применяется в основном на Тайване. GB2312 936 Упрощенный китайский, стандартная национальная кодировка. BIG5-HKSCS Расширенная Big5, применяемая в Гонг-Конге. Shift_JIS SJIS, SJIS-win, cp932, 932 Японская кодировка. EUC-JP EUCJP, eucJP-win Японская кодировка. MacRoman Кодировка, используемая в Mac OS. '' Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale()), в указанном порядке. Не рекомендуется к использованию. Замечание: Остальные кодировки не поддерживаются, вместо них будет применена кодировка по умолчанию и сгенерировано предупреждение.
Возвращаемые значения
Возвращает раскодированную строку.
Список изменений
Версия | Описание |
---|---|
5.6.0 |
Значение по умолчанию для параметра encoding было изменено
на значение конфигурационной опции default_charset.
|
5.4.0 | Кодировка по умолчанию сменилась с ISO-8859-1 на UTF-8. |
5.4.0 |
Были добавлены константы ENT_HTML401 , ENT_XML1 ,
ENT_XHTML и ENT_HTML5 .
|
Примеры
Пример #1 Декодирование HTML-сущностей
<?php
$orig = "I'll \"walk\" the <b>dog</b> now";
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // I'll "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
?>
Примечания
Замечание:
Может показаться странным, что результатом вызова trim(html_entity_decode(' ')); не является пустая строка. Причина том, что ' ' преобразуется не в символ с ASCII-кодом 32 (который удаляется функцией trim()),а в символ с ASCII-кодом 160 (0xa0) в принимаемой по умолчанию кодировке ISO-8859-1.
Смотрите также
- htmlentities() - Преобразует все возможные символы в соответствующие HTML-сущности
- htmlspecialchars() - Преобразует специальные символы в HTML-сущности
- get_html_translation_table() - Возвращает таблицу преобразований, используемую функциями htmlspecialchars и htmlentities
- urldecode() - Декодирование URL-кодированной строки
- addcslashes
- addslashes
- bin2hex
- chop
- chr
- chunk_split
- convert_cyr_string
- convert_uudecode
- convert_uuencode
- count_chars
- crc32
- crypt
- echo
- explode
- fprintf
- get_html_translation_table
- hebrev
- hebrevc
- hex2bin
- html_entity_decode
- htmlentities
- htmlspecialchars_decode
- htmlspecialchars
- implode
- join
- lcfirst
- levenshtein
- localeconv
- ltrim
- md5_file
- md5
- metaphone
- money_format
- nl_langinfo
- nl2br
- number_format
- ord
- parse_str
- printf
- quoted_printable_decode
- quoted_printable_encode
- quotemeta
- rtrim
- setlocale
- sha1_file
- sha1
- similar_text
- soundex
- sprintf
- sscanf
- str_getcsv
- str_ireplace
- str_pad
- str_repeat
- str_replace
- str_rot13
- str_shuffle
- str_split
- str_word_count
- strcasecmp
- strchr
- strcmp
- strcoll
- strcspn
- strip_tags
- stripcslashes
- stripos
- stripslashes
- stristr
- strlen
- strnatcasecmp
- strnatcmp
- strncasecmp
- strncmp
- strpbrk
- strpos
- strrchr
- strrev
- strripos
- strrpos
- strspn
- strstr
- strtok
- strtolower
- strtoupper
- strtr
- substr_compare
- substr_count
- substr_replace
- substr
- trim
- ucfirst
- ucwords
- vfprintf
- vprintf
- vsprintf
- wordwrap
Коментарии
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
If you need something that converts &#[0-9]+ entities to UTF-8, this is simple and works:
<?php
/* Entity crap. /
$input = "Fovič";
$output = preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $input);
/* Plain UTF-8. */
echo $output;
?>
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;
}
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 (")
- single quotes (' and ')
- non printable chars (e.g. )
With other $flags some or all won't be decoded.
It seems that ENT_XML1 and ENT_XHTML are identical when decoding.
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'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.