Muy buen articulo del encoding para los que lidiamos dia a dia

 Para los que tenemos problemas con el encoding me encontre esto por la red se los dejo

Hace unos dias tuve un problema tratando de desplegar tildes en una aplicación, el problema surgió cuando quise hacer que toda la aplicación fuera UTF-8.

Es decir, que la DB hablara UTF-8 y las paginas desplegaran UTF-8:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

Ahora, cuando hice el despliegue en la página, en vez de ver caracteres con tildes o signos de puntuancion de un lenguaje específico, no se desplegaban sino que mostraban caracteres extraños.

Despues de buscar e investigar, mi conclusión fue la siguiente:

Basicamente, los archivos de texto pueden tener diferentes “encodings” y asi reaccionan las funciones.

Por ejemplo, la función utf8_decode, convierte los datos pasados por parametro de tipo multy-byte UTF-8 a un single-byte de tipo ISO-8859-1.

Ahora la funcion utf8_encode funciona bien con un archivo guardado con encoding ANSI, PERO si aplicamos la misma funcion con archivo de tipo UTF-8, nos despliega caracteres extraños en las tildes y ñ’s. Esto porque la funcion espera un parametro de tipo ISO-8859-1 y le estamos pasando uno de tipo UTF-8.

Anyway, ¿porque es importante? por lo siguiente:

Si deseo escribir un archivo en español usando UTF-8, y guardo el archivo en ANSI, los caracteres se van a desplegar de una manera extraña.

Ahora bien, si guardo los archivos fisicamente usando UTF-8, al ser multi-byte el encoding del archivo, los caracteres en español se desplegarán correctamente.

A todo esto, una funcion que sirve mucho si desea hacer la conversion explicita es “iconv

Funcion: iconv

Uso: string iconv (string in_charset, string out_charset, string str)

Propósito: Convierte un string al encoding solicitado

Ejemplo:

<?php echo iconv('ISO-8859-1', 'UTF-8', 'á'); ?>

En un archivo guardado fisicamente como ANSI, funciona bien, PERO en un archivo guardado como UTF-8 va a desplegar un caracter extraño.

Ahora hay que tener cuidado, ya que si hacemos esto:

<?php echo iconv('UTF-8', 'ISO-8859-1', 'á'); ?>

En un archivo ISO-8859-1, nos genera un error “Notice”, porque esta esperando un string de tipo multi-byte, y le estamos pasando un string single-byte, debido al encoding del archivo PHP.

Por último, solo para probar el concepto:

En un archivo guardado como ANSI:

<?php echo ord('á'); ?>

Retorna, 255

En un archivo guardado como UTF-8:

<?php echo ord('á'); ?>

Retorna, 195

Dentro del zip file hay 2 archivos PHP, los 2 con el mismo contenido, la diferencia es el Encoding que use para guardar los archivos.

Resumen y conclusión

Si se trabaja con páginas donde el charset va a ser “ISO 8859-1”

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">

Asegurese de guardar los archivos fisicos PHP o HTML con un formato compatible tipo ANSI.

PERO si las paginas van a tener un charset distinto como UTF-8:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

El archivo físico debe ser guardado con el encoding UTF-8.

Anuncios
Publicado en programacion general

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: