(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 string
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.
stringLa string siendo inspeccionada.
encodingsUna lista de encodages de caracteres a probar, en orden. Esta lista puede ser especificada como un array de string, o como una string ú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 ejemplo anterior mostrará :
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 ejemplo anterior mostrará :
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 ejemplo anterior mostrará :
string(5) "UTF-8" string(10) "ISO-8859-1" string(10) "ISO-8859-5"