Pregunta

Tengo una base de datos MySQL con una tabla InnoDB containning campos varchar utf8_general_ci. Cuando voy a buscar a través de PHP (mediante PEAR :: MDB2) y trato de darles salida (a través de Smarty), consigo ??? símbolos. Me gustaría saber cómo solucionar ese problema, que es muy probablemente causado por PHP.

Una buena información para saber:

  • Se trata de una nueva versión del sitio que estoy trabajando, la versión anterior tenía el mismo problema a pesar de que no hizo uso de Smarty ni MDB2, por lo que son muy probablemente no la causa. Los htmlentities viejo programador utilizados () para remediar el problema, pero estoy tratando de evitar eso.
  • La codificación de caracteres de todos mis archivos (plantilla, fuente, etc.) es UTF-8 sin BOM.
  • Cuando puedo mostrar una página, todos los caracteres acentuados (los de las plantillas, no los que vienen de MySQL) se muestra correctamente y la codificación en el navegador es UTF-8. Si cambio manualmente a la norma ISO-8859-1, entonces el carácter de MySQL están outputed correctamente, pero no los otros.

Básicamente, parece que PHP o MySQL transforma los datos UTF-8 contenidas dentro de la base de datos con la norma ISO-8859-1 en algún momento durante la consulta / proceso de buscar, y eso es lo que desea corregir.

He hecho un montón de búsqueda, pero no han encontrado ninguna solución, y espero las mentiras problema en un entorno en alguna parte. Me gustaría evitar tener que utilizar htmlentities () o utf8_encode (), sin embargo, que podría ser la única manera de ir hasta PHP6 aparece.

Gracias por su entrada en esta!

¿Fue útil?

Solución

Hay que realizar algunas consultas para que lo utilice UTF-8 para la conexión (el valor predeterminado es de hecho Latin-1). Esto es lo que yo uso:

SET CHARACTER SET = "utf8";
SET character_set_database = "utf8";
SET character_set_connection = "utf8";
SET character_set_server = "utf8";

Sé que algunos de ellos parecen una exageración, pero que han sido probados y parecen funcionar bastante bien ...

Otros consejos

Mi conjetura es que los datos no se codificación UTF-8-cuando llegó a la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top