mb_decode_numericentity
PHP Manual
PHP Manual»Fonctions sur les chaînes de caractères multioctets»mb_decode_numericentity

mb_decode_numericentity

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

mb_decode_numericentity — Décode les entités HTML en caractères

Description

function mb_decode_numericentity(string $string, array $map, ?string $encoding = null): string

Convertit la chaîne d'entités HTML string en chaîne.

Liste de paramètres

string

La chaîne de caractères à décoder.

map

map est un tableau qui spécifie les codes à convertir.

encoding

Le paramètre encoding est l'encodage des caractères. S'il est omis ou null, l'encodage de caractères interne sera utilisé.

Valeurs de retour

La chaîne de caractères convertie.

Erreurs / Exceptions

Lève une exception ValueError si map contient une valeur qui n'est ni un entier, ni un nombre décimal, ni un booléen, ni null, ni une chaîne numérique.

Historique

Version Description
8.4.0 La fonction mb_decode_numericentity() lève désormais une exception ValueError si map contient une valeur qui ne peut pas être convertie implicitement en int.
8.0.0 encoding est désormais nullable.

Exemples

Exemple #1 Exemple avec map

<?php

$convmap = array(
    int start_code1, int end_code1, int offset1, int mask1,
    int start_code2, int end_code2, int offset2, int mask2,
    // ........
    int start_codeN, int end_codeN, int offsetN, int maskN
);
// Spécifie les valeurs Unicode de début (start_codeN) et fin (end_codeN)
// Ajoutez offsetN à la valeur, et faites un ET bit-à-bit avec maskN,
// puis convertit la valeur obtenue en entité numérique
?>

Exemple #2 L'exemple map échappe la chaîne JavaScript

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

    // L'encodage de char est 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;
}
 
// Données de tests
$convmap = [ 0x0, 0xffff, 0, 0xffff ];
$msg = '';

for ($i=0; $i < 1000; $i++) {
  // chr() ne peut pas générer de données correctes UTF-8 plus grande valeur que 128, utiliser mb_decode_numericentity().
  $msg .= mb_decode_numericentity('&#' . $i . ';', $convmap, 'UTF-8');
}
 
// var_dump($msg);
var_dump(escape_javascript_string($msg));
?>

Voir aussi

To Top