Foros del Web » Programando para Internet » PHP »

utf8 guarda caracteres especiales en bd

Estas en el tema de utf8 guarda caracteres especiales en bd en el foro de PHP en Foros del Web. Hola, he configurado todas las páginas de mi web en UTF-8 para que guarde sin BOM y a la hora de mostrar los datos los ...
  #1 (permalink)  
Antiguo 26/08/2012, 18:07
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
utf8 guarda caracteres especiales en bd

Hola, he configurado todas las páginas de mi web en UTF-8 para que guarde sin BOM y a la hora de mostrar los datos los muestra correctamente para guardar los datos los guarda con los carácteres especiales mal, tipo: Tecnológico lo guarda como Tecnológico

Y necesito comparar una columna entre todos los registros y lo que quiero es que lo muestre correctamente, es decir, que en la base de datos ya se guarde sin los carácteres especiales. Tengo el script configurado en UTF-8 y tambien guardado en ese mismo formato, a ver si alguien puede ayudarme, muchas gracias! :)
  #2 (permalink)  
Antiguo 26/08/2012, 18:12
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: utf8 guarda caracteres especiales en bd

Será el cotejamiento de tu base de datos el problema.
utf8_unicode_ci usa este
  #3 (permalink)  
Antiguo 26/08/2012, 22:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: utf8 guarda caracteres especiales en bd

Cómo sabes que los datos no se están guardando correctamente?

Es posible que tu base de datos esté configurada con UTF8 (en cualquiera de sus "sabores") pero el programa que utilizas para visualizarlos tenga otra codificación.

Entonces, verifica el cotejamiento de tu base de datos y tablas para que tengan el mismo juego de caracteres que tus scripts... fin del problema.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 27/08/2012, 08:29
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: utf8 guarda caracteres especiales en bd

Hola, he hecho lo que me habéis dicho y he cambiado el cotejamiento de las tablas afectadas a utf8_unicode_ci pero el problema sigue igual, los carácteres especiales se me guardan en la base de datos así: hö.

Los scripts que envían los datos están en UTF-8 y guardados el formato como tal, no sé por qué pasa esto, a ver si encontramos una solución entre todos, muchas gracias!
  #5 (permalink)  
Antiguo 27/08/2012, 08:37
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 6 meses
Puntos: 58
Respuesta: utf8 guarda caracteres especiales en bd

Si entras desde PHPMyAdmin a la base de datos también ves así los datos con caracteres extraños?
  #6 (permalink)  
Antiguo 27/08/2012, 08:42
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: utf8 guarda caracteres especiales en bd

Cita:
Iniciado por alyciashape Ver Mensaje
Si entras desde PHPMyAdmin a la base de datos también ves así los datos con caracteres extraños?
Si, precisamente me refiero a que en la base de datos los carácteres extraños aparecen de este modo, extraños, en cambio en la página aparecen correctamente y yo necesito que en la base de datos aparezca el texto correctamente no con esos carácteres.
  #7 (permalink)  
Antiguo 27/08/2012, 18:42
 
Fecha de Ingreso: agosto-2012
Mensajes: 54
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: utf8 guarda caracteres especiales en bd

hola coloca esto en tu conexion o tambien en las funciones esta en mysqli pero lo pasa s a mysql

if (!$mysqli->set_charset("utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
}
else {//printf("Conjunto de caracteres actual: %s\n", $mysqli->character_set_name());}
}
  #8 (permalink)  
Antiguo 27/08/2012, 19:02
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: utf8 guarda caracteres especiales en bd

Cita:
Iniciado por liberenatu Ver Mensaje
hola coloca esto en tu conexion o tambien en las funciones esta en mysqli pero lo pasa s a mysql

if (!$mysqli->set_charset("utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
}
else {//printf("Conjunto de caracteres actual: %s\n", $mysqli->character_set_name());}
}
He puesto ese código en el config.php y no surte ningún efecto, es decir, me sigue haciendo la conexión a la base de datos sin problemas.
  #9 (permalink)  
Antiguo 27/08/2012, 20:09
Avatar de thetwister  
Fecha de Ingreso: agosto-2008
Mensajes: 30
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: utf8 guarda caracteres especiales en bd

supongo que el dato a comparar lo envias con un Input text

Primero como decian antes checa que la columna que guarda ese dato en la Base de datos esté en utf8_unicode_ci

si traes aun dato para mostrar ya sea en un Input text o en texto normal y este tiene caracteres como letras con acentos o la ñ y te sale asi raro, por ejemplo
de Tecnología -> Tecnologóa o vas a introducirlo tu, entonces agregale utf8_encode

asi
Código PHP:
<input type="text" name="alguno" value="<?php echo utf8_encode($dato); ?> />
y ya no deberia aparecer con caracteres extraños, claro, esto si en la Base de datos ya la palabra está sin caracteres raros como el à que decias.

Pero si lo que vas a hacer es enviar "x" dato a la base de datos entonces sería usar el otro, utf8_decode

algo asi
Código PHP:
$alguno=utf8_decode($_POST['alguno']);
ó
$alguno
=utf8_decode($alguno//Segun lo que vayas a hacer
// conexion a la BD y Comparar
.
.


Pero esto quizas seria si no vas a usar muchas variables a introducir en la BD

Si es un dato dentro de una variable de array no se si se le pueda pasar asi nomas alguno de los dos (utf8_encode, utf8_decode), y automaticamente lo hago con todos dentro de el pues no lo he intentado pero intentale, espero te sirva de algo esto
  #10 (permalink)  
Antiguo 28/08/2012, 14:02
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
El problema es que tengo muchisimas variables y hacer eso en cada una seria un marron muy grande, gracias de todos modos, a ver si encontramos una solucion.
  #11 (permalink)  
Antiguo 31/08/2012, 08:51
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: utf8 guarda caracteres especiales en bd

Cita:
Iniciado por thetwister Ver Mensaje
supongo que el dato a comparar lo envias con un Input text

Primero como decian antes checa que la columna que guarda ese dato en la Base de datos esté en utf8_unicode_ci

si traes aun dato para mostrar ya sea en un Input text o en texto normal y este tiene caracteres como letras con acentos o la ñ y te sale asi raro, por ejemplo
de Tecnología -> Tecnologóa o vas a introducirlo tu, entonces agregale utf8_encode

asi
Código PHP:
<input type="text" name="alguno" value="<?php echo utf8_encode($dato); ?> />
y ya no deberia aparecer con caracteres extraños, claro, esto si en la Base de datos ya la palabra está sin caracteres raros como el à que decias.

Pero si lo que vas a hacer es enviar "x" dato a la base de datos entonces sería usar el otro, utf8_decode

algo asi
Código PHP:
$alguno=utf8_decode($_POST['alguno']);
ó
$alguno
=utf8_decode($alguno//Segun lo que vayas a hacer
// conexion a la BD y Comparar
.
.


Pero esto quizas seria si no vas a usar muchas variables a introducir en la BD

Si es un dato dentro de una variable de array no se si se le pueda pasar asi nomas alguno de los dos (utf8_encode, utf8_decode), y automaticamente lo hago con todos dentro de el pues no lo he intentado pero intentale, espero te sirva de algo esto

Siento tener que repostear pero necesito que alguien me eche una mano y tan abajo ya no se leen los temas... Tras disculparme, informo de que la manera que he citado (utf8_encode, utf8_decode) me funciona, pero necesitaría algo más "universal" ya que es una red social, por lo tanto estoy jugando continuamente con variables, y con tantas seguro que al usar este método me dejaría alguna, y al usuario lo desorientaría mucho, además de que no funcionaría correctamente el script, ojalá me podáis ayudar, os lo agradecería mucho, gracias por adelantado!
  #12 (permalink)  
Antiguo 31/08/2012, 09:25
Avatar de cesarin3134  
Fecha de Ingreso: enero-2012
Ubicación: Milan
Mensajes: 97
Antigüedad: 12 años, 10 meses
Puntos: 20
Respuesta: utf8 guarda caracteres especiales en bd

tienes que configurar el header de la pagina php cuando envias los datos :
algunos consejos :
1. Crea el db con charset, collation utf8
2. Crea tus archivos en utf8
3. En el archivo php escribe esto al inicio :

Código PHP:
Ver original
  1. header('Content-Type: text/html; charset=utf-8');

como segunda opcion puedes usar esta funcion :

Código PHP:
Ver original
  1. function my_htmlentities($var, $qs = ENT_COMPAT, $charset = 'ISO-8859-1')
  2. {
  3.     $search = array('ì', 'è', 'é', 'ò', 'à', 'ù');
  4.     $replace = array('&igrave;', '&egrave;', '&eacute;', '&ograve;', '&agrave;', '&ugrave;');
  5.      
  6.     $var = str_replace($search, $replace, $var);
  7.     $var = htmlentities($var, $qs, $charset, false);
  8.      
  9.     return $var;
  10. }

o puedes probar a forzar el db :

Código PHP:
Ver original
  1. $db = mysql_connect('localhost', 'user', 'password') or die(mysql_error());
  2.  mysql_set_charset('utf8', $db);


espero k te sirva de ayuda ;)
__________________
Web Graphic and Front-End Developer C.andavisa
http://www.cesart.it
  #13 (permalink)  
Antiguo 31/08/2012, 09:42
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 6 meses
Puntos: 58
Respuesta: utf8 guarda caracteres especiales en bd

Aver si te va a pasar como a mi que me volví loco y no encontraba solución y resulta que si bien puse la codificación de caracteres correcta para la base de datos, no así para cada uno de sus campos. Que aunque puse la "general" y tambien para cada tabla resulta que la de los campos se me puso "latin_unicode" no se por qué.

Estuve días rayandome la cabeza...
  #14 (permalink)  
Antiguo 31/08/2012, 14:34
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Gracias por el interes pero tengo cada uno de los campos en utf8 unicode ci, alguien puede ayudarme por favor?
  #15 (permalink)  
Antiguo 31/08/2012, 17:58
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: utf8 guarda caracteres especiales en bd

Hola a todos! Bueno publico para decir que ya he solucionado el problema, después de tantas horas buscando la solución, la posteo aquí por si alguien en el futuro ve esto y no hace falta que pierda tanto tiempo como lo he perdido yo:

Para que funcione se ha de poner:
Código PHP:
mysql_query ("SET NAMES 'utf8'"); 
justo antes de cualquier consulta, por ejemplo:

Código PHP:
mysql_query ("SET NAMES 'utf8'");
$query=mysql_query("SELECT * FROM novedades"); 
Pues ya lo podeis dar por cerrado el tema, gracias a todos los que os habéis interesado!

Etiquetas: bd, caracteres, especiales, registro, utf-8, guardar
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 10:20.