Foros del Web » Programando para Internet » PHP »

problema con ñ en una tabla mysql

Estas en el tema de problema con ñ en una tabla mysql en el foro de PHP en Foros del Web. tengo una tabla en mysql con cotejamiento en utf-8 pero al mostrar los datos en pantalla con php las ñ se ven con un cuadrado, ...
  #1 (permalink)  
Antiguo 14/10/2013, 07:12
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
problema con ñ en una tabla mysql

tengo una tabla en mysql con cotejamiento en utf-8 pero al mostrar los datos en pantalla con php las ñ se ven con un cuadrado, en cambio en el documento php los otros caracteres especiales se ven bien excepto los que saco de la bd alguna idea como solucionar esto?

saludos.
  #2 (permalink)  
Antiguo 14/10/2013, 07:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema con ñ en una tabla mysql

Depende.
Si en la base, usando un front-end, los caracteres están bien, entonces el error está en programación de PHP, y no en la base.
Usa el MySQL Workbench, o phpMyadmin, y verifica lo que está realmente guardado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/10/2013, 07:48
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

Hola gonzalo no entiendo a que te refieres con fornt-end, en phpMyadmin los caracteres estan bien guardados, de que podria ser el problema?
gracias
  #4 (permalink)  
Antiguo 14/10/2013, 08:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema con ñ en una tabla mysql

La expresión "fornt-end" se refiere, en bases de datos, a cualquier aplicación que se use para acceder a la base por medio de ejecución consultas SQL directas, sin mediar formularios o vistas de aplicaciones de ninguna clase.
phpMyadmin es un fornt-end para MySQL, aunque no el mejor.

En cuanto al problema, ya te lo respondí:
Cita:
Si en la base (...) los caracteres están bien, entonces el error está en programación de PHP, y no en la base.
Es decir, hay errores en tu manejo a nivel programación, y eso es tema del foro de PHP. El problema puede estar tanto en cómo los obtienes, en la forma en que los procesas, o como los muestras en la web. En alguna parte hay una collation o charset que deforma todo.

Movido a PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/10/2013 a las 08:23
  #5 (permalink)  
Antiguo 14/10/2013, 10:24
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

Estoy comprobando el charset del archivo php donde muestro los datos de la tabla y lo tengo en utf-8, lo que no entiendo es que si muestro esto en pantalla se ve bien:

Código PHP:
Ver original
  1. echo"esto es una ñ";

Como puedo comprobar donde se produce el error, lo que si me he dado cuenta que en otro archivo que no se veia bien el ejemplo anterior, donde la ñ se veia mal, era problema del charset lo cambie a utf-8 y solucione el problema, pero no logro solucionar el problema en los datos que salen de la tabla mysql, alguna ayuda?

Saludos.
  #6 (permalink)  
Antiguo 14/10/2013, 10:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema con ñ en una tabla mysql

Muestranos el código de los scripts, desde antes de abrir la base hasta cuando los envías a pantalla, incluyendo el encabezado de cada HTML que uses entre ambas cosas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/10/2013, 11:09
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Hola gnzsoloyo gracias por tu interes en ayudarme, el codigo es bastante sencillo ya que estoy haciendos las pruebas, el archivo php es este:

Código PHP:
Ver original
  1. include "conexion.php";
  2. if($db){
  3.     $sql='select * from ciudades';
  4.     $pdo=$db->prepare($sql);
  5.     $execute=$pdo->execute();
  6.     if($execute){
  7.       while ($reg=$pdo->fetch()){
  8.           echo $reg['ciudad']."<br>";
  9.       }
  10.     }else{echo"error en la ejecucion";}
  11. }


el resultado es una lista algo asin:

lugo
acoru�a

Queria añadir que la unica forma de encontrer de solucionar el problema es usando
utf8_encode, pero es lo que quiero evitar y solucionar el problema no taparlo.

Última edición por Triby; 14/10/2013 a las 12:46
  #8 (permalink)  
Antiguo 14/10/2013, 11:16
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: problema con ñ en una tabla mysql

Una de dos: Codificas la tabla de tu base de datos a UTF-8 por ejemplo, o bien pasas las vables por htmlentities() antes de hacer el registro.
  #9 (permalink)  
Antiguo 14/10/2013, 11:45
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

PHPeros gracias por tu colaboracion, te comento las tabla ya la tengo en utf-8 lo que quiero evitar es codificar los datos con php porque considero que eso seria esconder el error que estoy cometiendo.

Tengo una duda podria ser que algun otro archivo de la web este en diferente charset y esto afecte a toda la base de datos, sigo investigando y cualquier ayuda bienvenida se
  #10 (permalink)  
Antiguo 14/10/2013, 11:52
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: problema con ñ en una tabla mysql

Otros archivos no van a interferir con la bd de ningún modo...

No se que entiendes por "codificar", pero usar html es buen recurso para almacenar caracteres extraños.
  #11 (permalink)  
Antiguo 14/10/2013, 11:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema con ñ en una tabla mysql

Como ya te dije, si con otra interfaz (p.e. phpMyadmin) al hacer la consulta en SQL directo los datos se muestran bien, entonces el problema no está en la base, ni en los datos, sino en como los manejas ya en la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 14/10/2013, 12:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: problema con ñ en una tabla mysql

Estás usando:

Código PHP:
Ver original
  1. PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'

en tu conexión?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #13 (permalink)  
Antiguo 14/10/2013, 12:21
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

Hola andresdzphp, no estoy usando esa linea como deberia usarla asin ago la conexion a la bd

la conexion la realizo asin:

Código PHP:
Ver original
  1. function conexion_db(){
  2.     try {
  3.         $db = new PDO('mysql:host=localhost;dbname=bd;','root','');
  4.         $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  5.         return($db);
  6.     } catch (PDOException $e) {
  7.         print "<p>Error: No puede conectarse con la base de datos.</p>\n";
  8.         print "<p>Error: ".$e->getMessage()."</p>\n";
  9.         exit();
  10.     }
  11. }
  #14 (permalink)  
Antiguo 14/10/2013, 12:25
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: problema con ñ en una tabla mysql

Es importante que agregues:

Código PHP:
Ver original
  1. $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #15 (permalink)  
Antiguo 14/10/2013, 12:38
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

Agrege la linea asin pero nada
Código PHP:
Ver original
  1. function conexion_db(){
  2.         try {
  3.             $db = new PDO('mysql:host=localhost;dbname=bd;','root','');
  4.             $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  5.             $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
  6.             return($db);
  7.         } catch (PDOException $e) {
  8.             print "<p>Error: No puede conectarse con la base de datos.</p>\n";
  9.             print "<p>Error: ".$e->getMessage()."</p>\n";
  10.             exit();
  11.         }
  12.     }

force codificacion utf8 en apache, tambien cambie en php.ini el charset por defecto a utf8, comprobe los archivos que estubieran bien tambien la base de datos y las tablas con los campos y estan bien, cualquier ayuda o que haga alguna comprobacion seria bienvenida porque estoy saturadillo ya con el tema.
  #16 (permalink)  
Antiguo 14/10/2013, 12:51
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: problema con ñ en una tabla mysql

Hola, yo uso el atributo dentro de la conexion.

Código PHP:
Ver original
  1. $engine='mysql';
  2. $host = 'localhost';
  3. $usuario = 'aaaa';
  4. $password = 'xxxx';
  5. $base='base';
  6. $conn=$engine. ':dbname=' . $base . ';host=' . $host;
  7. $CONFIG=array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'');
  8. $PDO = new PDO($conn, $usuario, $password,$CONFIG);

Saludos
  #17 (permalink)  
Antiguo 14/10/2013, 13:05
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: problema con ñ en una tabla mysql

A mi me ha funcionado haciendo esto:

- Guardando documento en UTF8 sin BOM
- usando header('Content-type: text/html; charset=UTF-8'); ó <meta charset="uft-8"> en el caso de HTML5.
- Quitando los espacios que sobren al final del documento
- Colocando el charset de las tablas en uf8 general-ci
- Colocando Set names uft8 en la conexión

Si esto no funciona yo probaría con una función como esta:

Código PHP:
Ver original
  1. function sbd($string) {
  2.     if (mb_check_encoding($string, 'UTF-8') === true) {
  3.         return htmlspecialchars(strip_tags($string), ENT_QUOTES, 'UTF-8');
  4.     }
  5.     return htmlspecialchars(utf8_encode(strip_tags($string)), ENT_QUOTES, 'UTF-8');
  6. }
  7.  
  8. echo sbd($reg['tu_campo'];
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #18 (permalink)  
Antiguo 14/10/2013, 13:17
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

gracias a todos por vuestra ayuda me habeis solucionado el problema como dijo Erick_MD9 asin lo hice meti el atributo dentro de la conexion y funciono algo asin:

Código PHP:
Ver original
  1. function conexion_db(){
  2.             try {
  3.                 $CONFIG=array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  4.                 $db = new PDO('mysql:host=localhost;dbname=bd;','root','',$CONFIG);
  5.                 return($db);
  6.             } catch (PDOException $e) {
  7.                 print "<p>Error: No puede conectarse con la base de datos.</p>\n";
  8.                 print "<p>Error: ".$e->getMessage()."</p>\n";
  9.                 exit();
  10.             }
  11.         }
andresdzphp me faltaba ese atributo que dijistes pero no entiendo porque no funciona de la forma que postee, ya funciona perfectamente pero tengo la duda de porque no funciona con

Código PHP:
Ver original
  1. $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

en fin ya funciona gracias a todos y comentar que gnzsoloyo me estaba dando la respuesta desde un principio pero no sabia verla, gracias.
  #19 (permalink)  
Antiguo 14/10/2013, 13:25
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: problema con ñ en una tabla mysql

Cita:
Iniciado por roboty Ver Mensaje

no entiendo porque no funciona de la forma que postee

Código PHP:
Ver original
  1. $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
Aguna vez leí, no me acuerdo en donde , que habia un problema con PDO y mysql en esa cuestión.

Saludos
  #20 (permalink)  
Antiguo 14/10/2013, 13:27
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: problema con ñ en una tabla mysql

No sabría decirte pero ambas me funcionan perfectamente.

Me faltó decirte que te falta agregar:

Código PHP:
Ver original
  1. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

En el array de configuración para poder capturar las excepciones con try catch.

Que bueno que te funciona ahora.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #21 (permalink)  
Antiguo 14/10/2013, 13:34
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: problema con ñ en una tabla mysql

Cita:
Iniciado por andresdzphp Ver Mensaje
No sabría decirte pero ambas me funcionan perfectamente.

Me faltó decirte que te falta agregar:

Código PHP:
Ver original
  1. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

En el array de configuración para poder capturar las excepciones con try catch.

Que bueno que te funciona ahora.

Saludos.
Gracias nuevamente, saludos.
  #22 (permalink)  
Antiguo 14/10/2013, 13:52
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: problema con ñ en una tabla mysql

Cita:
Iniciado por Erick_MD9 Ver Mensaje
Aguna vez leí, no me acuerdo en donde , que habia un problema con PDO y mysql en esa cuestión.

Saludos
Nunca me habia puesto a pensar en esa diferencia (array y setAttribute()) y no es un problema con PDO y mysql como dices.

Lo que pasa es que MYSQL_ATTR_INIT_COMMAND se ejecuta sólo después de establecerse la conexión por eso hay que pasarlo en el array.

El mismo manual lo dice:

Cita:
Se ha de tener en cuenta que esta constante se puede usar solamente en el array driver_options cuando se construye un nuevo gestor de base de datos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #23 (permalink)  
Antiguo 14/10/2013, 14:20
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: problema con ñ en una tabla mysql

Gracias por la aclaración Andres, deberías corregir en donde has usado la otra forma.

Cita:
Iniciado por andresdzphp Ver Mensaje
No sabría decirte pero ambas me funcionan perfectamente.
Saludos
  #24 (permalink)  
Antiguo 14/10/2013, 14:58
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: problema con ñ en una tabla mysql

Siempre lo uso en array pero se aprendió algo nuevo gracias a tu comentario.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #25 (permalink)  
Antiguo 15/10/2013, 07:43
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: problema con ñ en una tabla mysql

Demasiadas vueltas para algo tan viejo... es fácil y no requiere de ningun tipo de codificación extra....

A la BD le pones como cotejamiento UTF8_UNICODE_CI
Y a los campos de tu tabla que van a recibir variables de textos, ya sea varchar o text, le pones como cotejamiento UTF8_SPANISH_CI... con eso puedes introducir caracteres especiales y te devolverá lo mismo sin ningún problema... en tu hoja HTML deberías tener también la cabecera normal
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

y problema solucionado.. nada codificar y decodificar y depurar caracteres...

Saludos.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: mysql, sql, tabla
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 01:51.