PHP 8.4.0 RC2 available for testing

mb_decode_numericentity

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

mb_decode_numericentityHTML sayısal karakter gösterimini karaktere dönüştürür

Açıklama

mb_decode_numericentity(
    string $dizge,
    array $bölge,
    ?string $kodlama = null,
    bool $onaltılık = false
): string

Belirtilen dizge dizgesindeki karakter kodlarından belirtilen bölge içinde kalan karakterlerin yerine HTML sayısal karakter gösterimlerini yerleştirir.

Bağımsız Değişkenler

dizge

HTML karakter kodlaması kaldırılacak dizge.

bölge

Dönüşüm yapılacak kod bölgesini içeren dizi.

kodlama

kodlama bağımsız değişkeninde karakter kodlaması belirtilir. Belirtilmediği takdirde veya null ise dahili karakter kodlaması kullanılır.

onaltılık

true ise sayısal gösterim onaltılık olur, değilse onluk olur.

Dönen Değerler

Dönüştürülen dizge.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0kodlama artık null olabiliyor.

Örnekler

Örnek 1 - bölge örneği

<?php
$bölge
= array (
int kodlama_başı1, int kodlama_sonu1, int göreli_konum1, int maske1,
int kodlama_başı2, int kodlama_sonu2, int göreli_konum2, int maske2,
........
int kodlama_başıN, int kodlama_sonuN, int göreli_konumN, int maskeN );
// kodlama_başıN ve int kodlama_sonuN için Evrenkodlu değer belirt,
// değere göreli_konumN ekleyip sonucu maskeN ile bitsel VE'le ve
// değeri sayısal gösterim dizgesine dönüştür.
?>

Örnek 2 - JavaScript dizgeyi önceleyen map örneği

<?php
function escape_javascript_string($str) {
$map = [
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0,0, // 49
0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,0,0, // 99
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1, // 149
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1, // 199
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1, // 249
1,1,1,1,1,1,1, // 255
];
// Kodlama: UTF-8
$mblen = mb_strlen($str, 'UTF-8');
$utf32 = bin2hex(mb_convert_encoding($str, 'UTF-32', 'UTF-8'));
for (
$i=0, $encoded=''; $i < $mblen; $i++) {
$u = substr($utf32, $i*8, 8);
$v = base_convert($u, 16, 10);
if (
$v < 256 && $map[$v]) {
$encoded .= '\\x'.substr($u, 6,2);
} else if (
$v == 2028) {
$encoded .= '\\u2028';
} else if (
$v == 2029) {
$encoded .= '\\u2029';
} else {
$encoded .= mb_convert_encoding(hex2bin($u), 'UTF-8', 'UTF-32');
}
}
return
$encoded;
}

// Veriyi sına
$convmap = [ 0x0, 0xffff, 0, 0xffff ];
$msg = '';
for (
$i=0; $i < 1000; $i++) {
// chr() 128'den büyük değerler için doğru UTF-8 veri üretmez,
// yerine mb_decode_numericentity() kullanılır.
$msg .= mb_decode_numericentity('&#'.$i.';', $convmap, 'UTF-8');
}

// var_dump($msg);
var_dump(escape_javascript_string($msg));

Ayrıca Bakınız

add a note

User Contributed Notes 4 notes

up
0
abderrahmanekaddour dot aissat at gmail dot com
2 years ago
<?php

// the following documentation depending on understanding of the code source of php mbr
// first in order to optimise the work of php
// the string must contain "&" or else php won't bother trying to decode.
// for the map : int start_codeN, int end_codeN, int offsetN, int maskN
// the entity must be in the range [start_codeN, end_codeN] , if the entity is greater or less
// mb_decode_numericentity will ignore the decode process and return the $string as it is.
// in the late version of php, $map : "must have a multiple of 4 elements"

$map = [ 0x0, 0xFFFF, 0, 0];
echo
mb_decode_numericentity('&#109;', $map ); // result "m"
// if offsetN = 1 result "l" ; the more you increase the decimal the more it use OR operrand.
$map_2 = [ 0x0, 0xFFFF, 60, 0];
echo
mb_decode_numericentity('&#109;', $map_2 ); // decode ( &#49; ) result : "1"

// entity Reference to check the result : https://cs.stanford.edu/people/miles/iso8859.html#ISO

?>
up
0
donovan at conduit it
18 years ago
note that at this time it seems that mb_decode_numericentity() only works with decimal entities and not hexadecimal entities. This fact would have saved me a good hour of time in debugging.

For those who need to convert hex entities try first converting them all to decimal entities with a combination of the preg_replace() and hexdec() functions.
up
0
dev at glossword info
20 years ago
Just two great functions for daily use:

/* Converts any HTML-entities into characters */
function my_numeric2character($t)
{
$convmap = array(0x0, 0x2FFFF, 0, 0xFFFF);
return mb_decode_numericentity($t, $convmap, 'UTF-8');
}
/* Converts any characters into HTML-entities */
function my_character2numeric($t)
{
$convmap = array(0x0, 0x2FFFF, 0, 0xFFFF);
return mb_encode_numericentity($t, $convmap, 'UTF-8');
}
print my_numeric2character('&#8217; &#7936; &#226;');
print my_character2numeric(' ? ? ');
up
-2
fernandosilveira at yahoo dot com dot br
4 years ago
Be careful!
In addition to translate numeric entities to chars on specified target encoding, this function encodes every character from input string to the specified target encodin, even if the characters are outside the range defined by the conversion map.
To Top