Replaces 'ill-formed' byte sequences with '?'.
See: https://github.com/php/php-src/pull/1099(PHP 7 >= 7.2.0, PHP 8)
mb_scrub — Remplace les séquences d'octets mal formées par le caractère de substitution.
Effectue une conversion de jeu de caractères depuis l'encodage spécifié, ou depuis l'encodage par défaut si aucun encodage n'a été spécifié, vers le même encodage. Cela a pour effet de remplacer toute séquence d'octets invalide par le caractère de substitution.
stringLa chaîne d'entrée.
encoding
L'encodage utilisé pour interpréter string.
S'il est omis ou null, le
paramètre mbstring.internal_encoding
sera utilisé s'il est défini, sinon le paramètre default_charset
sera utilisé.
Le résultat chaîne de caractères avec les séquences d'octets invalides remplacées.
| Version | Description |
|---|---|
| 8.0.0 |
encoding est désormais nullable.
|
Exemple #1 Remplacement au niveau des octets effectué par mb_scrub()
bin2hex() est utilisé ici car les terminaux, navigateurs et polices de caractères peuvent afficher une séquence d'octets mal formée avec leur propre caractère de remplacement, ce qui masque le contenu réel de la chaîne.
<?php
// L'octet 0xFF ne peut pas apparaître dans une chaîne UTF-8 valide.
$input = "A\xFFB";
echo bin2hex($input), "\n";
// Le caractère de substitution par défaut est "?" (0x3F).
echo bin2hex(mb_scrub($input, 'UTF-8')), "\n";
// U+FFFD REPLACEMENT CHARACTER est encodé en EF BF BD en UTF-8.
mb_substitute_character(0xFFFD);
echo bin2hex(mb_scrub($input, 'UTF-8')), "\n";
?>L'exemple ci-dessus va afficher :
41ff42 413f42 41efbfbd42
Exemple #2 Utiliser mb_scrub() avant un traitement tenant compte de l'UTF-8
Les motifs PCRE utilisant le modificateur u rejettent les sujets
qui ne sont pas en UTF-8 bien formé. Nettoyer l'entrée en premier la rend acceptable.
<?php
$input = "A\xFFB";
var_dump(preg_match_all('/./us', $input));
echo preg_last_error_msg(), "\n";
$clean = mb_scrub($input, 'UTF-8');
var_dump(preg_match_all('/./us', $clean));
?>L'exemple ci-dessus va afficher :
bool(false) Malformed UTF-8 characters, possibly incorrectly encoded int(3)
Replaces 'ill-formed' byte sequences with '?'.
See: https://github.com/php/php-src/pull/1099