# mb_detect_encoding

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

mb_detect_encoding — Détecte un encodage

### Description

mb_detect_encoding(string `$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é.

Avertissement

# Le résultat n’est pas fiable

Le nom de cette fonction est trompeur, elle effectue une « supposition » plutôt qu’une « détection ».

Les suppositions sont loin d’être précises, et par conséquent, cette fonction ne permet pas de détecter avec fiabilité l’encodage correct des caractères.

### Liste de paramètres

`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.

### Valeurs de retour

L'encodage de caractère détecté, ou `false` si la chaîne n'est pas valide dans un seul des encodages listé.

### Historique

Version | Description
--- | ---
8.2.0 | mb_detect_encoding() ne renverra plus les encodages non textuels suivants : `"Base64"`, `"QPrint"`, `"UUencode"`, `"HTML entities"`, `"7 bit"` et `"8 bit"`.

### Exemples

Exemple #1 Exemple avec mb_detect_encoding()

`<?php
$str = "\x95\xB6\x8E\x9A\x83\x52\x81\x5B\x83\x68";
// Détecte l'encodage avec le detect_order actuel
var_dump(mb_detect_encoding($str));
// "auto" est modifié selon mbstring.language
var_dump(mb_detect_encoding($str, "auto"));
// Spécifie le paramètre "encodings" avec une liste à virgules
var_dump(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"
];
var_dump(mb_detect_encoding($str, $encodings));
?>`

L'exemple ci-dessus va afficher :

    string(5) "ASCII"
    string(5) "ASCII"
    string(8) "SJIS-win"
    string(5) "ASCII"

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 :

- "Ä¢" (U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS suivi de U+00A2 CENT SIGN) encodé dans un de ISO-8859-1, ISO-8859-15, ou Windows-1252
- "ФЂ" (U+0424 CYRILLIC CAPITAL LETTER EF suivi de U+0402 CYRILLIC CAPITAL LETTER DJE) encodé en ISO-8859-5
- "Ģ" (U+0122 LATIN CAPITAL LETTER G WITH CEDILLA) encodé en UTF-8

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"

### Voir aussi

- mb_detect_order() - Lit/modifie l'ordre de détection des encodages