Personajes extraños de la base de datos PHP MySQL

Intento mostrar la información del producto almacenada en una base de datos MySQL, pero está escribiendo algunos caracteres extraños, como un diamante con un signo de interrogación dentro.

Creo que puede tratarse de un problema de encoding / UTF8, pero he especificado la encoding que deseo:

¿Es esto correcto? ¿Qué debo verificar?

Si solo los datos que provienen de la base de datos tienen caracteres extraños, asegúrese de que la conexión MySQL también esté en UTF8 usando:

 mysql_query("SET NAMES UTF8"); 

antes de cualquier otra consulta. De lo contrario, si los caracteres aparecen también en archivos “escritos a mano”, asegúrese de que los archivos se guarden como UTF-8 en su editor. También puede intentar configurar el encabezado de conjunto de caracteres a través de PHP:

 header('Content-type: text/html; charset=UTF-8'); 

También asegúrese de que todos los campos en las tablas que está consultando estén configurados como una variante UTF-8, por ejemplo utf8_general_ci .

La última vez que tuve ese problema, la solución fue similar a lo que dijo Tatu Ulmanen, pero ligeramente diferente …

Entonces, si su solución no funciona, intente reemplazarla

 mysql_query("SET NAMES UTF8"); 

con

 mysql_query("SET NAMES latin1"); 

Digo esto porque el juego de caracteres predeterminado en MySql es latin1, y eso es lo que se usa la mayor parte del tiempo …

Espero que ayude…

Supongo que quieres que el resultado esté en utf8

  • guardar tu script php utf8 codificado
  • asegúrese de que su encabezado http (o algunas metatags) le diga que la salida es utf8
  • todas las tablas en MySql deben ser utf8
  • Por último, pero no menos importante, la conexión entre el cliente y el servidor debe ser utf8. (Esto podría manejarse en algún lugar de la configuración de php.ini o haciendo la siguiente consulta en el SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8' db: SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'

Si sigues los 4 puntos, nunca deberías tener ningún problema con las codificaciones rotas.

Seconding lo que dice Tatu.

Esta es una buena lectura de fondo sobre la encoding: el mínimo absoluto que todo desarrollador de software debe saber absolutamente sobre Unicode y juegos de caracteres (¡Sin excusas!)