(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_detect_encoding — Detecta un encodage
$string
, array|string|null $encodings
= null
, bool $strict
= false
): string|false
Detecta el encodage más probable para la chaîne de caractères
string
desde una lista ordenada de candidatos.
La detección automática del juego de caracteres previsto nunca es totalmente fiable; sin información adicional, es similar a descifrar una cadena cifrada sin la clave. Siempre es preferible utilizar una indicación del juego de caracteres almacenado o transmitido con los datos, como el encabezado HTTP "Content-Type".
Esta función se utiliza principalmente con encodages multioctetos, donde no todas las secuencias de octetos forman una cadena válida. Si la cadena de entrada contiene una secuencia de este tipo, este encodage será rechazado, y el siguiente encodage será verificado.
El nombre de esta función es engañoso, realiza una « suposición » en lugar de una « detección ».
Las suposiciones están lejos de ser precisas, y por lo tanto, esta función no permite detectar de manera fiable el encodage correcto de los caracteres.
string
La string siendo inspeccionada.
encodings
Una lista de encodages de caracteres a probar, en orden. Esta lista puede ser especificada como un tableau de chaîne de caractères, o como una chaîne de caractères única separada por comas.
Si encodings
es omitido o null
,
el detect_order actual (definido con la opción de configuración
mbstring.detect_order,
o la función mb_detect_order()) será utilizado.
strict
Controla el comportamiento cuando string
no es
válido en ninguno de los encodings
listados.
Si strict
está definido como false
, el encodage que
corresponda más será devuelto; si strict
está definido como true
, false
será devuelto.
El valor por omisión de strict
puede ser definido
con la opción de configuración
mbstring.strict_detection.
El encodage de caracteres detectado, o false
si la cadena no es válida
en uno de los encodages listados.
Versión | Descripción |
---|---|
8.2.0 |
mb_detect_encoding() ya no devolverá los siguientes
encodages no textuales:
"Base64" , "QPrint" ,
"UUencode" , "HTML entities" ,
"7 bit" y "8 bit" .
|
Ejemplo #1 Ejemplo con mb_detect_encoding()
<?php
$str = "\x95\xB6\x8E\x9A\x83\x52\x81\x5B\x83\x68";
// Detecta el encodage con el detect_order actual
var_dump(mb_detect_encoding($str));
// "auto" es modificado según mbstring.language
var_dump(mb_detect_encoding($str, "auto"));
// Especifica el parámetro "encodings" con una lista separada por comas
var_dump(mb_detect_encoding($str, "JIS, eucjp-win, sjis-win"));
// Uso de un array para especificar el parámetro "encodings"
$encodings = [
"ASCII",
"JIS",
"EUC-JP"
];
var_dump(mb_detect_encoding($str, $encodings));
?>
El resultado del ejemplo sería:
string(5) "ASCII" string(5) "ASCII" string(8) "SJIS-win" string(5) "ASCII"
Ejemplo #2 Efecto del parámetro strict
<?php
// 'áéóú' encoded in ISO-8859-1
$str = "\xE1\xE9\xF3\xFA";
// La cadena no es válida en ASCII o UTF-8, pero UTF-8 es considerado un mejor ajuste
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], true));
// Si un encodage válido es encontrado, el parámetro strict no cambia el resultado
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));
?>
El resultado del ejemplo sería:
string(5) "UTF-8" bool(false) string(10) "ISO-8859-1" string(10) "ISO-8859-1"
En ciertos casos, la misma secuencia de octetos puede formar una cadena válida en diferentes encodages de caracteres, y es imposible determinar cuál interpretación era prevista. Un ejemplo, entre otros, la secuencia de octetos "\xC4\xA2" podría ser:
Ejemplo #3 Efecto del orden cuando múltiples encodages coinciden
<?php
$str = "\xC4\xA2";
// La cadena es válida en los tres encodages, por lo que el primero listado será devuelto
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']));
?>
El resultado del ejemplo sería:
string(5) "UTF-8" string(10) "ISO-8859-1" string(10) "ISO-8859-5"