Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Acentos y Ñ cuando tomo datos de la BD

Estas en el tema de Acentos y Ñ cuando tomo datos de la BD en el foro de PHP en Foros del Web. Como están? Estoy montando un sitio que le he puesto charset UTF-8 ya que me lo recomendaron para no tener problemas con acentos y ñ ...
  #1 (permalink)  
Antiguo 03/03/2014, 09:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Acentos y Ñ cuando tomo datos de la BD

Como están?

Estoy montando un sitio que le he puesto charset UTF-8 ya que me lo recomendaron para no tener problemas con acentos y ñ

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ahora bien, mientras escribo el código en HTML no tengo ningún problema escribo directo con Ñ y acento y todo perfecto se muestra sin problema.

El problema surge cuando tomo valores de una base de datos y los imprimo por php y eso que la base de datos la cree con charset utf8 también para intentar evitar estos problemas

Este es un ejemplo de datos que tomo de una tabla y se imprimen con el famoso � en lugar la ñ: (ejemplo preciso Dueño lo imprime Due�o)

Código SQL:
Ver original
  1. -- Creamos la tabla de tipo usuario, se necesita como referencia para la tabla 'usuarios'.
  2. CREATE TABLE IF NOT EXISTS tipo_usuario(
  3.     id_tipo_usuario TINYINT UNSIGNED AUTO_INCREMENT,
  4.     descripcion VARCHAR(9),
  5.     PRIMARY KEY(id_tipo_usuario)
  6. ) ENGINE=innodb DEFAULT CHARACTER SET =utf8 COLLATE=utf8_spanish_ci;
  7.  
  8. -- Insertamos dentro de la tabla tipo_usuario los tipos de usuario del sistema.
  9. INSERT INTO tipo_usuario (descripcion) VALUES
  10. ('Dueño'),
  11. ('Encargado'),
  12. ('Empleado'),
  13. ('Invitado');

he leido por ahí que usando las funciones utf_encode y decode se puede salvar este problema, pero mi consulta reside a si hay alguna forma de imprimir directamente las ñ y los acentos de la base de datos, porque si cada vez que tomo un valor debo ejecutar una función no lo veo muy funcional que digamos.

Desde ya muchas gracias!!!
  #2 (permalink)  
Antiguo 03/03/2014, 09:28
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Acentos y Ñ cuando tomo datos de la BD

Edito,

Revisa la codificación de tu base de datos y de cada una de las tablas "utf8_general_ci"
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #3 (permalink)  
Antiguo 03/03/2014, 09:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Acentos y Ñ cuando tomo datos de la BD

Bien cambié el collation de la Base de datos, por "utf8_general_ci"

Luego alteré las tablas una a una, y no funcionó.

Eliminé todas las tablas, y volví a cargar el sql dejando "utf8_general_ci"

De hecho ahora todas me muestran bien el utf8_general_ci, cuando antes algunas decian spanish pero nada sigo recibiendo la ñ guardada en Dueño dentro de la BD como ?



La única solución que encontré fue cambiar la configuración de los archivos y del proyecto por charset=ISO-8859-1

La BD sigue estando en UTF8 y ahora me muestra todo correctamente espero no tener problemas en el futuro...

Última edición por matiD; 03/03/2014 a las 09:57
  #4 (permalink)  
Antiguo 03/03/2014, 11:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Acentos y Ñ cuando tomo datos de la BD

Cuando te conectes a la base de datos desde PHP, envía un query así:
Código MySQL:
Ver original
  1. SET NAMES 'utf8';

Eso hace que la comunicación sea en UTF8.

Saludos.
  #5 (permalink)  
Antiguo 03/03/2014, 14:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Acentos y Ñ cuando tomo datos de la BD

Cita:
Iniciado por GatorV Ver Mensaje
Cuando te conectes a la base de datos desde PHP, envía un query así:
Código MySQL:
Ver original
  1. SET NAMES 'utf8';

Eso hace que la comunicación sea en UTF8.

Saludos.
Muchas gracias GatorV

Añadí esto en la función construct que tengo al inicio de la clase de operaciones mysql y funciona

Código PHP:
Ver original
  1. class OpMySQL
  2. {
  3.     public $resultado;
  4.  
  5.  
  6.     private $_con;
  7.     private $_stmt;
  8.     private $_tabla;
  9.    
  10.     private $_stmt_utf8;
  11.    
  12.     public function __construct()
  13.     {
  14.         //Preparamos la conexion a la BD
  15.         $this->_con = new mysqli(DB_HOST, DB_USUARIO, DB_PASSWORD, DB_DATABASE);
  16.         $sqlutf8 = "SET NAMES 'utf8'";
  17.         $this->_stmt_utf8 = $this->_con->prepare($sqlutf8);
  18.         $this->_stmt_utf8->execute();
  19.     }

Saludos!
  #6 (permalink)  
Antiguo 03/03/2014, 15:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Acentos y Ñ cuando tomo datos de la BD

Como tip, cuando vas a enviar un query sin parámetros y directamente, es más conveniente usar directamente mysqli::query en lugar de prepare.

Saludos.
  #7 (permalink)  
Antiguo 03/03/2014, 15:24
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Acentos y Ñ cuando tomo datos de la BD

Muchas gracias ya está cambiado

Código PHP:
public function __construct() 
    {
        
//Preparamos la conexion a la BD
        
$this->_con = new mysqli(DB_HOSTDB_USUARIODB_PASSWORDDB_DATABASE);
        
$sqlutf8 "SET NAMES 'utf8'";
        
$this->_con->query($sqlutf8);
    } 
Saludos!

Etiquetas: acentos, bd, html, tabla, usuarios
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 00:09.