Los webmasters, nos topamos frecuentemente con problemas referidos al uso del conjunto de caracteres o charset con los cuales se diseñan los archivos y las bases de datos. Y el problema radica en que no utilizan la misma codificación. La Base de Datos habla en un idioma y el archivo donde queremos poner ese dato, en otro.
PHP y las tablas MySQL almacenan los datos con un juego de caracteres o charset que está definido cuando generamos la tabla. A veces sucede que necesitamos mostrar esa información en un archivo php , pero los datos aparecen con signos extraños, con signos de pregunta y unos rombos, o con caracteres erróneos.
1. Solución:
Se puede establecer el juego de caracteres en el mismísimo servidor, modificando el archivo .htpaccess agregando la sentencia
AddDefaultCharset iso-8859-1
o
AddDefaultCharset utf-8
2. Solución:
Se puede agregar dentro del Header de la página en la cual queremos mostrar esos datos de la Base, la siguiente sentencia:
text/html; charset=utf-8″ />
o
text/html; charset=ISO-8859-1″ />
o también utilizando directamente php
«header(‘Content-Type: text/html; charset=utf-8’);»
3. Solución:
Si sigues teniendo problemas ( como era mi caso, que en otro lugar se perdía la codificación) puedes probar con estas funciones de php, que aplicadas al campo de la base de datos, obtienes la transformación:
En el caso, que veas signos de pregunta y rombos, significa que no se puede traducir el caracter Unicode porque está “mal formado”.
Solución: Hay que convertir nuestra cadena a utf-8 mediante la función utf8_encode().
«<?php echo utf8_encode($myrow2[«pais»]);
?>»
Si en cambio en vez de eñes y acentos, ves dos caracteres que suelen ser un à y algo más, quiere decir que tus datos están viniendo en utf8 y hay que pasarlo a Latin-1.
Esto se hace con la función utf8_decode().
«<?php echo utf8_decode($myrow2[«pais»]);
?>»
[fuente: LodeMiguel]