2012-08-22 33 views
5

Tengo algunos problemas con la función PHP mb_detect_encoding. No puedo convertirlo a ISO-8859-1. ¿Alguna ayuda?mb_convert_encoding issues

Código:

$str = "åäö"; 
$encoding = mb_detect_encoding($str); 
echo $encoding; 

$encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1")); 
echo $encoding; 

Salida:

UTF-8

UTF-8

Solución actualizada,

Actualicé mb_detect_order a array ('UTF-8', 'ISO-8859-1') y funcionó.

+0

¿Cuál es su 'mb_detect_order()'? – Passerby

+0

Bueno, ahí tienes. Actualicé mb_detect_order a UTF-8 al principio y funcionó. ¡Gracias! – brasimon

+0

Si resuelve su problema, publíquelo como respuesta y acéptelo cuando pueda. –

Respuesta

-2

He actualizado mb_detect_order a array ('UTF-8', 'ISO-8859-1') y funcionó

+0

Te engañas creyendo que la conversión ha funcionado. Como c3a5c3a4c3b6 es una cadena de bytes válida tanto en UTF-8 como en ISO-8859-1 (que representa cosas diferentes en los dos casos), puede obtener mb_detect_order para informarlo como codificación. – borrible

+0

@borrible ¿Qué pasa si su 'mb_internal_encoding' ya se ha configurado en UTF-8? – Passerby

+0

@Passerby - No es consistente con lo que estamos viendo. Si la secuencia realmente se hubiera convertido a ISO-8859-1, se habría convertido en la secuencia de bytes e5e4f6. Ahora que no es válido UTF-8 por lo que el mb_convert_encoding no habría informado UTF-8. Sin embargo, si la secuencia se hubiera dejado como c3a5c3a4c3b6 (UTF-8 válida o ISO-8859-1) obtendríamos la situación descrita. – borrible

6

te han convertido en realidad no la cadena. Por el contrario, la llamada a mb_convert_encoding no suponía que la cadena original estaba en UTF-8. La cadena antes de la llamada era una secuencia de bytes que ya podría haber sido ISO-8859-1 (y que habría representado los elementos de forma diferente). Puede ver que este es el caso por, en lugar de llamar al mb_detect_encoding, usando bin2hex en la cadena y viendo la secuencia de bytes después de la llamada de conversión. Verás que la secuencia de bytes no se modificó.

Para que la conversión funcione, debe indicarle (en este caso) la codificación original. Uso:

mb_convert_encoding($str, 'ISO-8859-1','utf-8'); 

Si examina la secuencia de bytes después de esto, verá que la conversión ha tenido lugar.

+0

¿Funciona ISO-8859-1 para "cadenas" sin codificación (es decir, secuencias de bytes aleatorios no válidos)? – Pacerier