Problemas de juego de caracteres
-
22-07-2019 - |
Pregunta
Tengo una pequeña aplicación ajax construida con php.
Utilizando phpMyAdmin, configuré una base de datos mysql en utf-8, e importé un archivo de texto que contenía datos utf-8.
Esto funcionó bien en una máquina Windows con easyphp, después de agregar character-set-server = utf8 y default-character-set = utf8 al archivo my.cnf.
Ahora he intentado mover esto a un servidor de producción donde no tengo acceso al archivo de configuración y no se muestran caracteres como diéresis.
¿Hay algo que se pueda configurar en el código php (no en el archivo de configuración) para arreglar esto, o algún comando que pueda darle a mysql?
Intenté ALTER DATABASE vweb_50
SET DE CARACTERES POR DEFECTO utf8 COLLATE utf8_bin con phpMyAdmin para probar desde utf8_general_ci pero no hizo ninguna diferencia.
Solución
Hay un par de cosas que hacer aquí, y no estoy seguro de entender su problema correctamente, pero si lo hago, creo que la mayoría de ellos se pueden abordar con las funciones de PHP utf8_encode y utf8_decode :
- utf8_encode
- Codifica una cadena ISO-8859-1 a UTF-8
- utf8_decode
- Esta función decodifica datos, se supone que están codificados en UTF-8, según ISO-8859-1.
Además, consulte htmlentities si es necesario.
Otros consejos
Si usa utf-8 en toda la aplicación (lo cual recomendaría), no necesita las funciones utf8_encode / decode. ¿Ha verificado en qué codificación se sirve su página? Probablemente el servidor esté configurado para enviar iso-8859-1 como juego de caracteres, mientras que su entorno de prueba envía utf-8. Establezca la codificación con un encabezado Content-Type:
header("Content-Type: text/html; charset=utf-8");