(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_detect_encoding — Détecte un encodage
$string
, array|string|null $encodings
= null
, bool $strict
= false
): string|false
Détecte l'encodage le plus probable pour la chaîne de caractères
string
depuis une liste ordonnée de candidats.
La détection automatique du jeu d'encodage prévu n'est jamais totalement fiable ; sans information additionnelles, c'est similaire à décoder une chaîne chiffré sans la clé. Il est toujours préférable d'utiliser une indication du jeu d'encodage stocké ou transmis avec les données, tel que l'en-tête HTTP "Content-Type".
Cette fonction est le plus utilise avec les encodages multioctets, où pas toutes les séquences d'octets forment une chaîne valide. Si la chaîne d'entrée contient un telle séquence, cet encodage sera rejeté, et le prochain encodage sera vérifié.
string
La string étant inspecté.
encodings
Une liste d'encodage de caractères à essayer, dans l'ordre. Cette liste peut être spécifier comme un tableau de chaîne de caractères, en tant qu'une chaîne de caractères unique séparé par des virgules.
Si encodings
est omis ou null
,
le detect_order actuel (défini avec l'option de configuration
mbstring.detect_order,
ou la fonction mb_detect_order()) sera utilisé.
strict
Contrôle le comportement quand string
n'est
valide dans aucun des encodings
listé.
Si strict
est défini à false
, l'encodage qui
correspond le plus sera retourné ; si strict
est défini à true
, false
sera retourné.
La valeur par défaut de strict
peut être définie
avec l'option de configuration
mbstring.strict_detection.
L'encodage de caractère détecté, ou false
si la chaîne n'est pas valide
dans un seul des encodages listé.
Exemple #1 Exemple avec mb_detect_encoding()
<?php
// Détecte l'encodage avec le detect_order actuel
echo mb_detect_encoding($str);
// "auto" est modifié selon mbstring.language
echo mb_detect_encoding($str, "auto");
// Spécifie le paramètre "encodings" avec une liste à virgules
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");
// Utilisation d'un tableau pour spécifie le paramètre "encodings"
$encodings = [
"ASCII",
"JIS",
"EUC-JP"
];
echo mb_detect_encoding($str, $encodings);
?>
Exemple #2 Effet du paramètre strict
<?php
// 'áéóú' encoded in ISO-8859-1
$str = "\xE1\xE9\xF3\xFA";
// The string is not valid ASCII or UTF-8, but UTF-8 is considered a closer match
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], true));
// If a valid encoding is found, the strict parameter does not change the result
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], true));
?>
L'exemple ci-dessus va afficher :
string(5) "UTF-8" bool(false) string(10) "ISO-8859-1" string(10) "ISO-8859-1"
Dans certain cas, la même séquences d'octet peut former une chaîne valide dans différents encodages de caractères, et il est impossible de déterminer quelle interprétation était prévu. Un exemple, parmi tant d'autres, la séquence d'octets "\xC4\xA2" pourrait être :
Exemple #3 Effet de l'ordre quand plusieurs encodages correspondent
<?php
$str = "\xC4\xA2";
// The string is valid in all three encodings, so the first one listed will be returned
var_dump(mb_detect_encoding($str, ['UTF-8', 'ISO-8859-1', 'ISO-8859-5']));
var_dump(mb_detect_encoding($str, ['ISO-8859-1', 'ISO-8859-5', 'UTF-8']));
var_dump(mb_detect_encoding($str, ['ISO-8859-5', 'UTF-8', 'ISO-8859-1']));
?>
L'exemple ci-dessus va afficher :
string(5) "UTF-8" string(10) "ISO-8859-1" string(10) "ISO-8859-5"