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;
}