2

Estoy utilizando una base de datos MySql, donde almaceno noticias, una pequeña bajada y la nota.

En la base de datos estan todas las notas con sus correspondientes caracteres.

Después levanto los títulos y las bajadas y los muestro en una tabla en la que se puede cliquear para verlas completas.

Investigué y le puse a cada registro lo siguiente:

<?php echo utf8_decode($row['titulo']); ?>
<?php echo utf8_decode($row['resumen']); ?>

Lo que obtengo es un resultado muy dispar. Los títulos no hay uno que salga con los caracteres correctos, y las bajadas algunas salen bien y otras no.

Vean las imagenes:

esa esta bien esa esta mal esta mal

¿Puede ser que el problema radique en que estoy usando netbeans?


Probe usar

<?php echo utf8_encode($row['titulo']); ?>
<?php echo utf8_encode($row['resumen']); ?>

y anda bien pero no se si es la mejor solución

MNibor
  • 899
  • 1
  • 13
  • 34
  • 3
    Mal camino estás tomando para manejar el encodaje de tus datos. No entiendo... ¿por qué usas `utf8_decode()`? ¿No te interesa mostrar los datos en utf8, que es lo normal? Recomiendo que leas esto: **[¿Por que el Carácter inspector (�) aparece en algunos datos obtenidos de la Base de Datos?](https://es.stackoverflow.com/a/59510/29967)** – A. Cedano Jul 23 '17 at 22:30
  • antes estaba usando msqli y andaba a las mil maravillas. Ahora estoy usando PDO si mal no recuerdo había seteado en la conexion de msqli los caracteres utf-8 (cuando se creaba la conexion)... no se como es en PDO para setearlo... – MNibor Jul 23 '17 at 22:33
  • 1
    Eso es porque no estás indicando el endocaje adecuado al crear la conexión PDO. Si añades esto al array de parámetros que pasas a PDO, no tendrás ningún problema: `PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"` Por si tienes dudas de lo que digo, [el código de mi clase PDO](https://github.com/padrecedano/PHP-PDO/blob/master/DbPDO.class.php) muestra el array del que hablo. También... por supuesto, quita los `utf8_decode()` en cada `echo` – A. Cedano Jul 23 '17 at 22:38
  • Fijate que desde phpmyadmin (o desde tu herramienta de manejo de DB, en mi caso MySQL Workbench) podés setear la codificación de la base de datos seleccionando la que querés editar -> Operaciones -> Cotejamiento -> utf-8 – Genarito Jul 23 '17 at 23:11
  • Es correcto @Genarito, pero a veces, aunque esté bien seteada allí, si no indicas el encondaje cuando creas la conexión, pueden presentarte caracteres extraños. – A. Cedano Jul 24 '17 at 00:12
  • Ah no sabía! Gracias por la aclaración! – Genarito Jul 24 '17 at 00:15
  • 1
    Estoy casi seguro que el problema se debe a que no estás estableciendo utf8 como juego de caracteres al crear la conexión PDO. Si pones el código donde creas la conexión PDO, sin revelar usario y contraseñas reales, podría mostrarte con un ejemplo cómo se establece la codficación al crear la conexión. – A. Cedano Jul 24 '17 at 13:10

2 Answers2

3

Desde la conexión puedes especificar el juego de caracteres a usar:

$db = new PDO("mysql:host=127.0.0.1;dbname=datos;charset=UTF8", 'usuario', 'contraseña');

Solo por no dejar cabos sueltos: Verifica que tu base de datos y tablas estén codificadas en utf-8 para evitarte problemas posteriores.

Triby
  • 23,274
  • 3
  • 13
  • 35
0

Vale te comento.

encode y decode son funciones que se necesitan la una a otra.

Si vas a meter datos en base de datos pon encode y para traducirlos a lenguaje humano decode

recuerda mirar la codificacion de la base de datos

Yonkykong
  • 31
  • 3