Foros del Web » Programando para Internet » PHP »

error con htmlentities, codificacion UTF-8

Estas en el tema de error con htmlentities, codificacion UTF-8 en el foro de PHP en Foros del Web. Buenas. Tengo una cadena que extraigo de la base de datos mysql, por ejemplo, 'acá'. Quiero reemplazar en esta cadena los caracteres especiales, para poder ...
  #1 (permalink)  
Antiguo 07/01/2009, 22:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
error con htmlentities, codificacion UTF-8

Buenas. Tengo una cadena que extraigo de la base de datos mysql, por ejemplo, 'acá'. Quiero reemplazar en esta cadena los caracteres especiales, para poder mostrarlos en pantalla sin problema, entonces lo que hago es htmlentities('acá', ENT_QUOTES, 'UTF-8'); pero me devuelve una cadena vacía siempre. En cambio, cuando no tiene ningún caracter que reemplazar, digamos la cadena 'aca', la función me devuelve la misma cadena original.
En la base de datos, las cadenas se guardan correctamente, no aparece ningún caracter raro ni nada por el estilo.
En mi página, tengo esta etiqueta:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

¿En donde puede estar el error?. Cualquier otra alternativa para lograr lo que busco será bienvenida.

Saludos.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 08/01/2009, 10:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

Ahora si hago htmlentities('alguna_cadena', ENT_QUOTES, 'UTF-8') me funciona bien, pero si 'alguna_cadena' es un texto extraído de la base de datos, entonces deja de funcionar.

EDITO: cambiando el juego de caracteres de la base de datos con mysqli_set_charset a utf8, me muestra ahora una cadena, pero los caracteres acentuados me figuran con otro simbolo, por ejemplo, la 'í' me figura con '¡' (símbolo de admiración)
__________________
Add, never Remove

Última edición por mariano_donati; 08/01/2009 a las 10:15
  #3 (permalink)  
Antiguo 08/01/2009, 10:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: error con htmlentities, codificacion UTF-8

Hola, intentaste con utf8_encode y utf8_decode?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 08/01/2009, 10:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

No habia probado, pero no funciona. Te muestro las salidas de ejemplo con las que probé:

La cadena original es Facultad de Matemática, Astronomía y Física

htmlentities -> Facultad de Matem tica, Astronom¡a y F¡sica
utf8_decode -> Facultad de Matem?tica, Astronom?a y F?sica
utf8_encode -> Facultad de Matem tica, Astronom¡a y F¡sica

Acá parecen como 'i', pero en realidad las i acentuadas son signos de admiración.
__________________
Add, never Remove
  #5 (permalink)  
Antiguo 08/01/2009, 13:09
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: error con htmlentities, codificacion UTF-8

Y en que tenés el HTML?. Se entiende que si sacas UTF8 tendrás que tener el head HTML para tal comportamiento... (lo ves en ver>encoding de la mayoría de los browsers)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 08/01/2009, 13:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

Lo tengo en ISO-8859-1. ¿Esta etiqueta no tiene nada que ver?:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
__________________
Add, never Remove
  #7 (permalink)  
Antiguo 08/01/2009, 13:26
 
Fecha de Ingreso: julio-2008
Mensajes: 40
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: error con htmlentities, codificacion UTF-8

¿Y en el código fuente qué caracter aparece?
  #8 (permalink)  
Antiguo 08/01/2009, 13:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

htmlentities($cadena) -> Facultad de Matem&nbsp;tica, Astronom&iexcl;a y F&iexcl;sica
utf8_decode($cadena) -> Facultad de Matem�tica, Astronom�a y F�sica
utf8_encode($cadena) -> Facultad de Matem tica, Astronom¡a y F¡sica
__________________
Add, never Remove
  #9 (permalink)  
Antiguo 08/01/2009, 13:49
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: error con htmlentities, codificacion UTF-8

Matem&nbsp;tica en todo caso es Matem&aacute;tica, no está ni cerca!...estás seguro que el dato base es correcto? Intentaste sin nada?

PD: Si, va el head utf8, y así debería leerlo en browser. Se me hace que estás encodeando más de una vez, los datos de MySql dejalos como están, sacales el set y proba.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 08/01/2009, 14:02
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

Si le saco mysqli_set_charset htmlentities no me devuelve nada. En phpmyadmin en la parte de cotejamiento me figura latin1_swedish_ci.
¿A que te referís con que el dato base sea correcto?
__________________
Add, never Remove
  #11 (permalink)  
Antiguo 08/01/2009, 14:11
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: error con htmlentities, codificacion UTF-8

Deberás debuguear, intentá en la misma pagina poner un dato hardcodeado (Ej: htmlentities('más') ), revisar el dato en la db, etc...ir probando parte por parte a ver donde estás encodeando de más o de menos.

PD: Me refería a que "Matemática" pasado por htmlentities no es Matem&nbsp;tica en sino Matem&aacute;tica, que a htmlentities el dato le está llegando corrupto.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #12 (permalink)  
Antiguo 09/01/2009, 06:20
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

En el foro de mysql también me ayudaron y pude encontrar la solución. Seteando el cotejamiento de la base de datos, las tablas y los campos a latin1_spanish_ci o bien a utf8_unicode_ci se muestran bien por la web. Aunque ahora no se me muestran bien en la base de datos, y eso repercute cuando tengo que realizar alguna búsqueda, por ejemplo, si quiero buscar la cadena 'acá', si ingreso 'aca' me sale bien, pero si ingreso 'acá' no me devuelve ningún registro.
Saludos.
__________________
Add, never Remove
  #13 (permalink)  
Antiguo 09/01/2009, 07:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: error con htmlentities, codificacion UTF-8

Tendrías que hacer algo como:

Código PHP:
campo like '%".utf8_encode($str)."%' 
Eso si está en utf8, sino un decode....nuevamente será cuestión de probar.

Nota: No sé porque estás usando UTF8 (supongo que tendrás idiomas que no son soportados por latin), pero la idea es que unifiques los datos, y sabiendo que PHP no interpreta solo utf8 al igual que MYSQL, no es tan complicado. Al principio cuesta porque mezclamos los encodings, pero no tiene muchas vueltas. ;)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #14 (permalink)  
Antiguo 09/01/2009, 07:38
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años
Puntos: 9
Respuesta: error con htmlentities, codificacion UTF-8

Ya lo unifiqué a latin1, y cotejamiento latin1_spanish_ci.
__________________
Add, never Remove
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 04:10.