1

Estoy programando un proyecto e iba de lujo, hasta que extraigo los datos de mi bd y hago un echo para mostrar el nombre del usuario. Al verificar la información en mi navegador, me di cuenta que, la información no se estaba mostrando correctamente. Verifico la BD y el nombre está guardado correctamente, es decir, sin ? o signos raros.

Tengo un nombre almacenado (JESÚS) y me muestra JES?S. Lo más raro es, que cuando escribo tildes o la letra ñ directamente en mi HTML, el navegador las muestra sin problemas. Cuando debugeo, utilizo FirePHP4Chrome, y veo el resultado de la query por la consola y lo reviso {run_usu: "777", nom_usu: "JESÚSÑÑ", apa_usu: "PARRA", ama_usu: "VEGA", cel_usu: null, …}, no me arroja ningún desperfecto (?*_), pero cuando hago el echo con php a la variable, nace el error.

Estuve investigando, y existe la opción SET CHARSET con el objeto creado de mysql. Después, hago un character_set_name y me devuelve latin1. He intentado cambiarlo, desde php (con el método comentado) y cambiandolo desde el modelador (mysqlworkbench), pero aún así, me sigue retornando latin1... ¿será eso?.

Algunos datos interesantes que puedan ayudar: 1. Mi BD está en utf8_default(modelada con mysqlworkbench). 2. Estoy usando xampp 7.2.11(mysql, aunque el servidor ahora trabaja con mariadb). 3. Los ficheros php, dentro de su header, tienen el meta utf8.

Me despido y espero una respuesta.

Saludos!

EDIDATO: Al parecer, era el "collation"(colación) de la BD. La especifiqué en utf8_unicode_ci. Luego, al objeto $mysqli le apliqué su método set_charset("utf8");

Solucionado.

imARIEL777
  • 11
  • 4
  • Existe una pregunta frecuente que trata este tema en profundidad. Podrías echarle un ojo y nos cuentas. https://es.stackoverflow.com/questions/59489/por-que-el-car%C3%A1cter-inspector-aparece-en-algunos-datos-obtenidos-de-la-base – phpMyGuel Nov 13 '18 at 09:09
  • Sí, lo vi hace un rato, pero en realidad no funciona o yo no entiendo. Jamás me había sucedido esto, es primera vez. – imARIEL777 Nov 13 '18 at 09:26
  • Podrías ponernos el código en el que creas el objeto mysql y tratas de mostrarlo en el HTML. Sin ver como lo estás haciendo, aunque estés explicando extensamente lo que has intentado, es difícil ver donde podrías estar teniendo el problema. – phpMyGuel Nov 13 '18 at 09:34
  • 2
    Lo acabo de solucionar. Primero que todo, creo que era la codificación de la base de datos. La puse en UTF8_UNICODE_CI. Luego, en el objeto de mysqli, le cambié a utf8 con $objMysql->set_charset("utf8"). – imARIEL777 Nov 13 '18 at 09:45
  • ¡Estupendo! Gracias por publicar la solución que te valió. – phpMyGuel Nov 13 '18 at 09:59
  • 1
    Era un problema en los niveles 3 y 4 de la [respuesta que menciona @PHPMyguel](https://es.stackoverflow.com/a/59510/29967), la cual es de mi autoría. Para evitar esto lo mejor es usar `utf-8` en todas partes y revisar siempre la fuente de datos, en caso de estar tomando la información de algún archivo mal codificado. Saludos. – A. Cedano Nov 13 '18 at 10:37
  • el problema es que "ñ" no es un formato valido para un JSON , para ser valido debes codificarlo llevarlo a unicode , [leer esta respuesta](https://es.stackoverflow.com/a/169371/28035) – JackNavaRow Nov 13 '18 at 12:06
  • No creo que sea posible duplicado, dado que al escribir en HTML, palabras con Tildes y Ñ, lo mostraba perfectamente. El problema era el "collation" de la base de datos. Luego en el servidor (PHP) modificar la estructura de respuesta con con el objeto $mysqli y método set_charset(); Gracias a todos por ayudart. – imARIEL777 Nov 13 '18 at 17:45

0 Answers0