26 julio 2024

Cómo solucionar el problema con caracteres extraños en acentos y eñes: charset UTF-8 / ISO-8859-1

latin1

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»]);
?>»

charset-php

[fuente: LodeMiguel]

Andrea Cummins

Andrea Cummins Es Senior Editor de GeeksRoom. Estudió Ciencias de la Computación en la facultad de Cs Exactas de la Universidad de Buenos Aires. Hace 23 años que vive en el campo, en la ciudad de Venado Tuerto, Santa Fe y gracias a Internet, pudo seguir actualizándose con las nuevas tecnologías. A medida que pasó el tiempo se fue capacitando de manera autodidacta y participando en Congresos y Cursos. Su empresa se llama VenadoSoft. Su hobbie es la fotografía y le encanta mostrar su ciudad y su gente a través de su lente.

Ver todas las entradas de Andrea Cummins →