Alguna vez les ha pasado que revisando la información desde la misma BD, con phpMyAdmin por ejemplo, encuentran que los datos están almacenados correctamente, contiene los acentos y las eñes, pero al momento de extraer la información desde PHP esta se muestra con símbolos raros en lugar de los caracteres especiales ?
Pues bienvenido al club de los desconcertados. Seguramente se te ocurrió añadir funciones las funciones uff8_encoder() y uft8_decoder() según el caso, solucionando "momentaneamente" el problema, solo para darte cuenta luego que la cagaste peor aun.
Para saber como esta configurado tu MySQL hay que entrar en phpMyAdmin y desde la ventana Variables usa filtro para ver los valores de las variables referidas a character y collation, si están distintas allí esta el problema. Si no tienes acceso a la ventana de variables usa la ventana SQL y escribe show variables.
character-set-server --> utf8 collation-server --> utf8_spanish_ci
character_set_server --> latin1 collation_server --> latin1_swedish_ci
En tu archivo HTML bajo la etiqueta HEAD debes poner <Meta CharSet='UTF-8' />
<!DOCTYPE html> <HTML lang="es"> <HEAD> <META CharSet='UTF-8' /> <TITLE>Manual PHP</TITLE> ... </HEAD> <BODY> ... </BODY> </HTML>
Si tu archivo en PHP puro debes añadir la linea
header("Content-Type: text/html;charset=utf-8");
En la cadena de conexion de MySQL añade esto según si usa MySQL o MySQLi
mysql_query("SET NAMES 'utf8'"); $db->query("SET NAMES 'utf8'");
Si alguna de tus tablas no quedo bien luego de los cambios, aun la puedes salvar con el siguiente comando. Convierte caracteres latin1 a UTF-8.
SELECT convert(cast(convert(content using latin1) as binary) using utf8) AS content