Foros del Web » Programando para Internet » PHP »

Problema con utf8 que no puedo resolver

Estas en el tema de Problema con utf8 que no puedo resolver en el foro de PHP en Foros del Web. Hola, estoy arreglando unos problemas en la web de un amigo, pero hay una cosa que no entiendo por qué no sale. En la base ...
  #1 (permalink)  
Antiguo 27/09/2011, 03:03
Avatar de Mikimoto74  
Fecha de Ingreso: enero-2005
Mensajes: 88
Antigüedad: 15 años
Puntos: 2
Problema con utf8 que no puedo resolver

Hola, estoy arreglando unos problemas en la web de un amigo, pero hay una cosa que no entiendo por qué no sale.

En la base de datos se están almacenando los caracteres codificados de esta manera:

"Curso de Auto esculpido de Uñas "

en este caso la ñ se almacena como ñ

En la web, la salida es esta:

"Curso de auto esculpido de u�as"

Lo he tratado de solucionar con la función utf8_decode() pero sigue saliendo exactamente igual:

"Curso de auto esculpido de u�as"

No es el caso según creo, pero por si acaso también he usado utf8_encode() y me sale peor:

"Curso de auto esculpido de u��as "

Qué más podría hacer partiendo de que ya hay muchos registros almacenados de ese modo? Además, el campo en cuestión de la BD está cotejado como utf8_general_ci
  #2 (permalink)  
Antiguo 27/09/2011, 03:45
Avatar de Mikimoto74  
Fecha de Ingreso: enero-2005
Mensajes: 88
Antigüedad: 15 años
Puntos: 2
Problema con utf8 que no puedo resolver

mmm, es extraño, he solucionado parte del problema, pero no del todo.

Resulta que antes de la salida de texto, le hacía esto:

Código PHP:
ucfirst(strtolower($datosAviso['titulo'])) 
Si no le paso esas funciones, la ñ sí que la muestra, sin ni siquiera necesitar un utf8_decode() Pero lo que me interesaría es poder usar las funciones anteriores sin que se cargue eñes o acentos.

Por otro lado me he percatado de otro problema con otro campo que contiene un texto largo. Los saltos de línea son almacenados así: \r\n y entonces en la salida le hago un nl2br() para que me los convierta en <br />, pero no, los sigue mostrando como texto, y no hay ningún salto de línea.

Toda ayuda es bienvenida.
  #3 (permalink)  
Antiguo 27/09/2011, 04:04
Avatar de jesusbg  
Fecha de Ingreso: septiembre-2011
Ubicación: Santiago de Compostela
Mensajes: 41
Antigüedad: 8 años, 4 meses
Puntos: 1
Respuesta: Problema con utf8 que no puedo resolver

mira la codificación de la base de datos y mira la codificación de la página. Prueba a hacer un par de cambios en ellas: suele siplificar el código

sinceramente es la mejor opción que se me ocurre.
  #4 (permalink)  
Antiguo 27/09/2011, 04:24
Avatar de Mikimoto74  
Fecha de Ingreso: enero-2005
Mensajes: 88
Antigüedad: 15 años
Puntos: 2
Respuesta: Problema con utf8 que no puedo resolver

Hola jesusbg:
La base de datos, sus tablas y los campos, están todos codificados como
utf8_general_ci

y la página web tiene el siguiente meta para la codificación:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Por cierto, el segundo problema que he puesto, el de los saltos de línea, ni caso. Resulta que el texto pasaba dos veces por la función mysql_real_escape_string() y por eso el \r\n lo tomaba como texto plano.

Aún me queda este tema de la codificación. Se me ocurre que en vez de usar:
ucfirst(strtolower(...))

podría formatear el texto con CSS. Con eso me imagino que solucionaría el problema. Pero por otro lado, creo que sería mejor forzar a que el texto introducido por el usuario se almacene tal cual en la base de datos, sin que sufra modificación de ñ a ñ por ejemplo. No sé si es porque se está usando utf8_general_ci en vez de utf8_unicode_ci. El caso es que solo hago lo siguiente a los textos enviados por el usuario antes de realizar la inserción o actualización en la BD:
mysql_real_escape_string(strip_tags(stripslashes(. ..)))
Es algo de esto lo que convierte las ñ en ñ?

Etiquetas: registro, resolver, 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 05:57.