ConFoo 2025

html_entity_decode

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

html_entity_decodeHTML öğelerini karşılığı olan karakterlere dönüştürür

Açıklama

html_entity_decode(string $dizge, int $seçenekler = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ?string $kodlama = null): string

html_entity_decode() işlevi htmlentities() işlevinin tersine dizge içinde karaktere dönüşebilecek tüm HTML öğelerini dönüştürür.

Daha kesin olarak, bu işlev, a) seçilen belge türü için zorunlu olarak geçerli olan tüm öğelerin (tüm sayısal öğeler dahil) kodunu çözer - yani, XML için, bu işlev bir DTD'de tanımlanabilecek isimli öğelerin kodunu çözmez ve b) seçilen kodlama ile ilişkili kodlanmış karakter kümesindeki ve seçilen belge türünde izin verilen karakter öğelerinin kodunu çözer. Diğer tüm öğeler olduğu gibi bırakılır.

Bağımsız Değişkenler

dizge

Girdi dizgesi.

seçenekler

Seçimlik seçenekler bağımsız değişkeni ile çift ve tek tırnaklar için işlevin nasıl davranacağını belirleyebilirsiniz. ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 öntanımlı olmak üzere şu sabitler bitsel VEYAlanarak belirtilebilir:

Olası sabit seçenekleri
Sabit İsmi Açıklama
ENT_COMPAT Sadece çift tırnaklar dönüştürülür, tek tırnaklara dokunulmaz.
ENT_QUOTES Çift tırnaklara ilaveten tek tırnaklar da dönüştürülür.
ENT_NOQUOTES Ne tek ne de çift tırnaklar dönüştürülür.
ENT_SUBSTITUTE Geçersiz kod dizilimi için boş bir dizge döndürülmeyip dizilimin yerine Unicode Değiştirme Karakteri (U+FFFD veya &#FFFD;) yerleştirilir.
ENT_HTML401 Kodu HTML 4.01 olarak ele alır.
ENT_XML1 Kodu XML 1 olarak ele alır.
ENT_XHTML Kodu XHTML olarak ele alır.
ENT_HTML5 Kodu HTML 5 olarak ele alır.

kodlama

Karakterleri dönüştürürken kullanılan kodlamayı tanımlayan seçimlik bağımsız değişken.

Belirtilmezse kodlama için default_charset yapılandırma seçeneğinin değeri öntanımlıdır.

Bu bağımsız değişken teknik olarak seçimlikse de kodunuz için gereken değeri atamanız gerekir. Çünkü default_charset yapılandırma seçeneğine hatalı bir değer atanmış olabilir.

Dönen Değerler

Kodlaması çözülmüş dizge.

Sürüm Bilgisi

Sürüm: Açıklama
8.1.0 seçenekler bağımsız değişkeninin öntanımlı değeri ENT_COMPAT iken ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 oldu.
8.0.0 kodlama artık null olabiliyor.

Örnekler

Örnek 1 - HTML öğelerinin karakterlere dönüştürülmesi

<?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
?>

Notlar

Bilginize:

trim(html_entity_decode('&nbsp;')); ile dizgenin neden boş bir dizgeye dönüşmediğini merak ediyor olabilirsiniz. Bunun sebebi '&nbsp;' öğesinin karakter kodunun 32 değil 160 olmasıdır.

Ayrıca Bakınız

add a note

User Contributed Notes 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