mb_scrub

(PHP 7 >= 7.2.0, PHP 8)

mb_scrubRemplace les séquences d'octets mal formées par le caractère de substitution.

Description

function mb_scrub(string $string, ?string $encoding = null): string

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.

Liste de paramètres

string

La 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é.

Valeurs de retour

Le résultat chaîne de caractères avec les séquences d'octets invalides remplacées.

Historique

Version Description
8.0.0 encoding est désormais nullable.

Exemples

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)

Voir aussi

add a note

User Contributed Notes 1 note

up
22
Sammitch
8 years ago
Replaces 'ill-formed' byte sequences with '?'.

See: https://github.com/php/php-src/pull/1099