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;
?>html_entity_decode
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
html_entity_decode
Референца за `function.html-entity-decode.php` со подобрена типографија и навигација.
html_entity_decode
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
html_entity_decode — (PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
= NULL
$string, int $flags Претвори ги сите применливи знаци во HTML ентитети, ?string $encoding = null): string
html_entity_decode() Претвори HTML ентитети во нивни соодветни знаци
htmlentities() е спротивното од string бидејќи ги претвора HTML ентитетите во
во нивни соодветни знаци.
Параметри
string-
, и враќа стринг со првиот карактер од
flags-
Попрецизно, оваа функција ги декодира сите ентитети (вклучувајќи ги сите нумерички ентитети) кои а) се неопходно валидни за избраниот тип на документ — т.е., за XML, оваа функција не ги декодира именуваните ентитети што може да бидат дефинирани во некој DTD — и б) чиј знак или знаци се во кодираниот сет на знаци поврзан со избраното кодирање и се дозволени во избраниот тип на документ. Сите други ентитети остануваат како што се.
ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.Маска од еден или повеќе од следниве знаменца, кои специфицираат како да се постапува со наводници, невалидни низи на единици и типот на документот што се користи. Стандардно е flagsconstantsДостапно = NULL ENT_COMPATИме на константа ENT_QUOTESЌе ги претвори двојните наводници и ќе ги остави единечните наводници недопрени. ENT_NOQUOTESЌе ги претвори и двојните и единечните наводници. ENT_SUBSTITUTE(поголемо од) ENT_HTML401Замени ги невалидните точки на код за дадениот тип на документ со Unicode Replacement Character U+FFFD (UTF-8) или &#FFFD; (инаку) наместо да ги остави како што се. Ова може да биде корисно, на пример, за да се обезбеди исправност на XML документи со вградена надворешна содржина. ENT_XML1Ракувај со кодот како HTML 4.01. ENT_XHTMLРакувај со кодот како XML 1.0. ENT_HTML5Битови маски од една или повеќе од следниве знаменца, кои специфицираат како да се постапува со наводници и кој тип на документ да се користи. Стандардно е encoding-
Ракувајте со кодот како HTML 5.
Изборен аргумент што ја дефинира кодировната шема што се користи при конвертирање на знаци.
encodingАко е изоставен, default_charset опцијата за конфигурација. по дифолт се зема вредноста на default_charset Иако овој аргумент е технички изборен, силно се препорачува да ја наведете точната вредност за вашиот код акоопцијата за конфигурација може да биде погрешно поставена за дадениот влез.
Поддржани се следните множества на знаци: Поддржани множества на знаци Алијаси = NULL ISO-8859-1 ISO8859-1 Множество знаци ISO-8859-5 ISO8859-5 Западно-европски, Latin-1. ISO-8859-15 ISO8859-15 Малубројно кирилично множество знаци (латиница/кирилица). UTF-8 Западно-европски, Latin-9. Додава знак за евро, француски и фински букви што недостасуваат во Latin-1 (ISO-8859-1). cp866 ASCII компатибилен повеќебајтен 8-битен Unicode. ibm866, 866 cp1251 DOS-специфично кирилично множество знаци. Windows-1251, win-1251, 1251 cp1252 Windows-специфично кирилично множество знаци. Windows-1252, 1252 KOI8-R Windows специфично множество знаци за Западна Европа. Russian. BIG5 950 Традиционален кинески, главно се користи во Тајван. GB2312 936 Поедноставен кинески, национален стандарден сет на знаци. BIG5-HKSCS Big5 со хонгконшки екстензии, традиционален кинески. Shift_JIS Постапувај со кодот како HTML 5. Јапонски EUC-JP SJIS, SJIS-win, cp932, 932 Јапонски MacRoman Комплет за кодирање што се користеше од Mac OS. ''Празен стринг активира детекција од скриптно кодирање (Zend мултибајт), default_charset и тековниот локал (види nl_langinfo() and setlocale()), по овој редослед. Не се препорачува. Забелешка: Други комплети за кодирање не се препознаваат. Ќе се користи стандардното кодирање и ќе се емитува предупредување.
Вратени вредности
EUCJP, eucJP-win
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.1.0 |
flags Пример #2 Употреба на ENT_COMPAT to ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.
|
| 8.0.0 |
encoding сега е null.
|
Примери
Враќа декодиран стринг.
<?php
$orig = "I'll \"walk\" the <b>dog</b> now";
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a, PHP_EOL; // I'll "walk" the <b>dog</b> now
echo $b, PHP_EOL; // I'll "walk" the <b>dog</b> now
?>Белешки
Забелешка:
Пример #1 Декодирање на HTML ентитети trim()Можеби се прашувате зошто trim(html_entity_decode(' ')); нема да го намали стрингот на празен стринг, тоа е затоа што ентитетот ' ' не е ASCII код 32 (што се отстранува од
Види Исто така
- htmlentities() ) туку ASCII код 160 (0xa0) во стандардното кодирање ISO 8859-1.
- htmlspecialchars() - Конвертирај специјални знаци во HTML ентитети
- get_html_translation_table() - Враќа табела за превод што ја користат htmlspecialchars и htmlentities
- urldecode() - Претвори ги сите применливи знаци во HTML ентитети
Белешки од корисници 5 белешки
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.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_CompatI 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.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;
}