Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Problema con caracteres especiales desde phpmyadmin

Estas en el tema de Problema con caracteres especiales desde phpmyadmin en el foro de Sistemas de gestión de contenidos en Foros del Web. Ya leí varios posts y no logro resolver el problema. Tengo todas mis paginas en utf-8 y la codificacion de todas mis tablas y de ...
  #1 (permalink)  
Antiguo 08/08/2008, 13:50
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Exclamación Problema con caracteres especiales desde phpmyadmin

Ya leí varios posts y no logro resolver el problema.

Tengo todas mis paginas en utf-8 y la codificacion de todas mis tablas y de mi bd en utf8_bin (mysql).

Ahora, el sistema funciona perfectamente.

Pasa lo siguiente, ingreso un texto en un input ("hola"), via web, y cuando lo miro en mi administrador (phpmyadmin) se ve "hóla"... y viceversa, si ingreso algo con tilde o eñe en phpmyadmin, se ve mal en la web.

Estoy usando PDO para conectarme a la base. He leído que se soluciona seteando la codificación con cada conexión a BD, pero con PDO no se bien como se hace. Probé:
Código PHP:
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND"SET NAMES 'utf8'"); 
pero no lo solucionó, tampoco dió problemas.

Como siempre, espero sus respuestas, y gracias desde ya.
  #2 (permalink)  
Antiguo 08/08/2008, 14:47
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Problema con caracteres especiales desde phpmyadmin

que codificacion tiene el fichero *.php?
prueba con esta etiqueta html en el <head>

Código HTML:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
  #3 (permalink)  
Antiguo 08/08/2008, 14:50
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

Todos los archivos son utf-8.
Y tengo el meta tambien en utf-8. y la idea es mantener esa codificación...
  #4 (permalink)  
Antiguo 08/08/2008, 14:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con caracteres especiales desde phpmyadmin

Tema trasladado a Aplicaciones Prefabricadas.
  #5 (permalink)  
Antiguo 09/08/2008, 19:42
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: Problema con caracteres especiales desde phpmyadmin

Cita:
Iniciado por DooBie Ver Mensaje
que codificacion tiene el fichero *.php?
prueba con esta etiqueta html en el <head>

Código HTML:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
tambien estoy de acuerdo, hasta donde me acuerdo esto es lo que deberias de hacer si estas utilizando español en tus paginas, con utf-8 vas a ver mal los caracteres
__________________
Blogzote.com :-) Mi blog
  #6 (permalink)  
Antiguo 11/08/2008, 06:42
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

Tengo entendido que el formato utf-8 es mas moderno y soluciona todos estos problemas de caracteres especiales. Por eso la idea era arrancar de cero con utf8.

Y, como dije, la aplicación funciona correctamente, pero los datos guardados en la base aparecen con caracteres cambiados. A la larga va a ser molesto.

Si alguien con experiencia en el tema puede darme una mano, se lo agradezco.
  #7 (permalink)  
Antiguo 11/08/2008, 07:17
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Problema con caracteres especiales desde phpmyadmin

Cita:
Iniciado por chitoso Ver Mensaje
Tengo entendido que el formato utf-8 es mas moderno y soluciona todos estos problemas de caracteres especiales. Por eso la idea era arrancar de cero con utf8.

Y, como dije, la aplicación funciona correctamente, pero los datos guardados en la base aparecen con caracteres cambiados. A la larga va a ser molesto.

Si alguien con experiencia en el tema puede darme una mano, se lo agradezco.
mi experiencia me dice que con utf-8 tenia problemas para mostrar algunos caracteres, y con iso-8859-1 me lo mostraba bien, incluso usando iso-8859-15 me los mostraba mal, con lo que he decidido usar iso-8859-1
  #8 (permalink)  
Antiguo 11/08/2008, 07:27
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

DooBie, agradezco tu colaboración y experiencia. La verdad, es que he leído en varios lugares, lo que ya te he comentado sobre utf8, por eso quería arrancar con esta codificación.
Pero, como siempre, uno tiene que lanzar las cosas YA y que anden YA, así que si no logro hacerlo andar en breve, no dudes que voy a seguir tus consejos.

Saludos y gracias.
  #9 (permalink)  
Antiguo 11/08/2008, 09:03
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Problema con caracteres especiales desde phpmyadmin

Si mantienes todo en utf-8 tiene que andar todo bien.

El detalle que veo es por el lado de phpmyadmin, ya que como comentas, todo te funcionaba correctamente hasta que editaste con el mismo. Yo me he encontrado con problemas a la hora de respaldar desde phpmyadmin (dump), ya que rompe todos los caracteres especiales (como si generara con la info en utf-8 una salida iso).

Revisa lo siguiente:
  • Que la interfaz de phpmyadmin esté configurada para utf y no esté en iso (en el home de la aplicación y su configuración).
Si te siguen los problemas, te diría que uses otro cliente para trabajar, no veo que estés haciendo las cosas mal, es la herramienta que te está jugando una mala pasada.


Nota para el resto de las colaboraciones: iso está en desuso, hay que usar solo UTF-8.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 11/08/2008, 09:46
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

Gracias Enrique. Me quedo un poco mas tranquilo.

Aunque por otro lado, verifiqué que phpmyadmin esté usando la misma codificación y probando con mySQL GUI TOOLS de mySQL tengo el mismo problema.

Escribo en la web, lo veo mal en el admin de la BD (veo caracteres "raros"), escribo en la BD y veo (?) en la web. Me sucede tanto localmente como en el servidor.

Estoy revisando la codificación de los archivos nuevamente...
  #11 (permalink)  
Antiguo 11/08/2008, 09:56
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Problema con caracteres especiales desde phpmyadmin

Tienes que ser muy detallista y preciso con las pruebas, o se te puede escapar algo.

  1. El cabezal html está en utf8?
  2. Realiza un dump de la base de datos y verifica que no exista la palabra iso o latin, solo deja la codificación en la base y no en las tablas o los campos de texto.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #12 (permalink)  
Antiguo 11/08/2008, 10:12
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

Todos los archivos tienen como cabezal:
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />...
Hago un dump a un .sql y no me aparece latin ni iso.

Cita:
solo deja la codificación en la base y no en las tablas o los campos de texto
No se si entendí, le saco la codificación a las tablas y los campos? Vere como se hace...
  #13 (permalink)  
Antiguo 11/08/2008, 10:20
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Problema con caracteres especiales desde phpmyadmin

Si, si le quitas toda referencia a nivel de tablas o campos (ya que puedes tener una tabla en utf y un campo en latin, muy loco), queda todo superditado a un solo juego de caracteres y es el que definas en la base de datos.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #14 (permalink)  
Antiguo 11/08/2008, 11:02
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

Borré la base. Cree una nueva con codificacion utf8. Subi la estructura y los datos, sin incluir la codificación.
No hay caso...
  #15 (permalink)  
Antiguo 11/08/2008, 11:12
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Problema con caracteres especiales desde phpmyadmin

Revisemos todos los pasos, al detalle.

Describe paso a paso lo que haces, y donde exactamente se rompe todo.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #16 (permalink)  
Antiguo 11/08/2008, 11:45
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: Problema con caracteres especiales desde phpmyadmin

No se bien a que te referís, porque el error ya lo describi varias veces, creo que me estas preguntando por el momento en que guardo y obtengo los datos... aca va.

Lo muestro para el caso de ABM de Clientes.

En el script para guardar:

Código PHP:
if(!empty($_POST['name'])){
            
$client->setName($_POST['name']); 
La conexión a la base de datos (PDO):

Código PHP:
static public function getConnection() {
            require(
HOME.'/dbconfig.php');
            try {
                
$dbh = new PDO("mysql:dbname=$db;host=$host""$user""$pass");
                
$dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND"SET NAMES 'utf8'");
                return 
$dbh;
            }
            catch(
PDOException $e)
            {
                throw new 
Exception("Error al conectarse a la base de datos:<br/>" $e->getMessage());
            }
        } 
Para guardar el cliente:

Código PHP:
$dbh MySQLConnect::getConnection();

            if(
$c->getId() == -1){
                
$stmt $dbh->prepare("INSERT INTO clients
                                       (
                                           id,
                                           name,
                                           phone,
                                           email,
                                           address,
                                           rut,
                                           razon_social,
                                           active
                                       )
                                       VALUES
                                       (
                                            :client_id,
                                            :name,
                                            :phone,
                                            :email,
                                            :address,
                                            :rut,
                                            :razon_social,
                                            :active
                                       )"
                
);
                
$oid OIDManager::getInstance()->getClientID();
                
$stmt->bindParam(':client_id'$oid);
            }
            else{
                
$stmt $dbh->prepare("UPDATE clients
                                       SET
                                            name = :name,
                                            phone = :phone,
                                            email = :email,
                                            address = :address,
                                            rut = :rut,
                                            razon_social = :razon_social,
                                            active = :active
                                       WHERE id  = :client_id"
                
);
                
$stmt->bindParam(':client_id'$c->getId());
            }


            
$stmt->bindParam(':name'$c->getName());
            
$stmt->bindParam(':phone'$c->getPhone());
            
$stmt->bindParam(':email'$c->getEmail());
            
$stmt->bindParam(':address'$c->getAddress());
            
$stmt->bindParam(':rut'$c->getRut());
            
$stmt->bindParam(':active'$c->getActive());
            
$stmt->bindParam(':razon_social'$c->getRazonSocial());

            try
            {
                
$stmt->execute();
                
$dbh null;
            }
            catch(
PDOException $ex){
                throw new 
Exception($ex->getMessage());
            }
        }

        public function 
loadClient(Client &$c){

            
$link MySQLConnect::getConnection();
            
$query "";

            if(
$c->getId()!=-1){
                
$query "SELECT id, name, phone, email, address, rut, razon_social, active
                              FROM clients
                              WHERE id = "
.$c->getId()." LIMIT 1";
            }
            else{
                
$query "SELECT id, name, password, fullname, email, authority
                              FROM  users
                              WHERE username = '"
.$c->getUsername()."' LIMIT 1";
            }

            try{
                
$stmt $link->query($query);
                
$row $stmt->fetch(PDO::FETCH_OBJ);

                
$c->setId($row->id);
                
$c->setName($row->name);
                
$c->setPhone($row->phone);
                
$c->setEmail($row->email);
                
$c->setAddress($row->address);
                
$c->setRut($row->rut);
                
$c->setRazonSocial($row->razon_social);
                
$c->setActive($row->active);

                
$link null;
            }
            catch(
PDOException $e)
            {
                echo 
$e->getMessage();
            } 
Y... bueno, para mostrarlo hago un load() al cliente, que basicamente hace lo mismo, pero carga los valores, sin aplicarle ningun tipo de funcion.
Luego $client->getName().

Como decía, desde la web, y desde el gestor de BD, es consistente. Es decir, todos los datos que modifico y doy de alta en la web, se ven ok en la web. El tema es que si ingreso "mañana" y lo voy a ver en phpmyadmin, se ve mal (y viceversa). Perdón por ser repetitivo.

Si no era especificamente lo que preguntaste, decime que estoy atento.
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 03:29.