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