Foros del Web » Programando para Internet » PHP »

Problema con Unicode en una matriz

Estas en el tema de Problema con Unicode en una matriz en el foro de PHP en Foros del Web. Hola a todos: Se me ha presentado un problema realmente curioso y me gustaría saber cómo lo puedo resolver. Vaya por delante la configuración: Base ...
  #1 (permalink)  
Antiguo 08/03/2012, 12:57
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 6 meses
Puntos: 8
Problema con Unicode en una matriz

Hola a todos:

Se me ha presentado un problema realmente curioso y me gustaría saber cómo lo puedo resolver.

Vaya por delante la configuración:
  • Base de datos y tablas MySQL con cotejamiento utf8_unicode_ci.
  • La conexión con la base de datos se realiza en un script aparte que incluye la linea mysql_query("SET NAMES 'utf8'").
  • En la página resultante incluyo header ('Content-type: text/html; charset=utf-8').
Por razones que no creo que haya que explicar necesito trabajar con caracteres Unicode y en una matriz de prueba he hecho que se rellene con algunos de esos caracteres digamos no comunes. Pongamos el caso de la A con anillo encima (Å, no se si se verá correctamente) que corresponde a U+00C5.

Cuando consulto a la base de datos, y me devuelve los caracteres, se visualiza correctamente. Sin embargo, probablemente porque la matriz se genera en el servidor, si hago print_r($array) lo que devuelve es un �.

He probado mb_check_encoding() para averiguar si el código es UTF-8 pero me devuelve falso.

Por favor, alguien puede comentarme qué está sucediendo y cómo puedo solucionarlo.

Muchas gracias por adelantado y un saludo para todos.
__________________
A. Uttranadhie
  #2 (permalink)  
Antiguo 08/03/2012, 13:06
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 1 mes
Puntos: 528
Respuesta: Problema con Unicode en una matriz

No estoy del todo seguro, pero me no es lo mismo una salida html con su cabecera que un print_r sin formato, el print_r tomará el set indicado en la configuración estándar de php, que no siempre es utf8. Habría que hacer la conversión correcta para la salida que necesitas. Aunque quizá entendí mal tu procedimiento y lo que quieres lograr.
  #3 (permalink)  
Antiguo 08/03/2012, 13:13
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Problema con Unicode en una matriz

Hola:

Pues por ahí creo que está el problema, por ahí ...

O sea, que print_r() no es capaz de devolver el formato UTF-8 aun cuando le hayamos señalado en header() que así lo debe entender el servidor, ¿correcto?

El problema entonces es saber si realmente la matriz está guardando adecuadamente el carácter o debo realizar algún de conversión previamente.

También he probado con mb_convert_encoding() pero no realiza la conversión.

¿Alguna idea?

En cualquier caso, muchas gracias.
__________________
A. Uttranadhie
  #4 (permalink)  
Antiguo 08/03/2012, 13:19
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 1 mes
Puntos: 528
Respuesta: Problema con Unicode en una matriz

Emmm no, no me expresé bien, será que yo uso el printr sólo cuando hago debug sin cabeceras...

Si ya indicaste el header, print_r debe dar bien los datos (en el set indicado en el header)


Si tu matriz está en unicode, trata de usar iconv() para pasar los datos al set que necesitas (utf8 según entendí).
  #5 (permalink)  
Antiguo 08/03/2012, 14:21
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Problema con Unicode en una matriz

Hola:

He probado con iconv() pero ni por esas. No sé por dónde tirar pero trataré de investigar más.

En cualquier caso muchísimas gracias y te mando un karma.
__________________
A. Uttranadhie

Etiquetas: arrays, matrices, unicode, utf-8
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:23.