Codificación de Lenguaje (Language Encoding) Mayo 6, 2007
Posted by jorgepedret in developer.trackback
Language Encoding
(Codificación del Lenguaje)
Durante la evolución de la web, varias veces se ha hecho el intento de crear un estándar para el manejo del lenguaje. A partir de todos estos intentos se creo una confusión general en el asunto, siendo el iso-8859-1 el más utilizado, o el colocado por defecto por el dreamweaver.
El encoding es la forma de especificar a una página en que forma debe leer los datos que esta leyendo. Lo que lo hace de cierto modo complicado, es que éste puede ser especificado en distintos lugares:
-> Archivo .htacces
-> Configuración del Servidor
-> Documento XHTML a través de los meta tags
Están listados en orden de importancia, es decir que si tienes un archivo XHTML con el encoding definido en los meta tags, la configuración del servidor va a reemplazar la codificación con que es leído este archivo. Y si el servidor esta configurado para leer por ejemplo el formato iso-8859-1 y se especifica a través del archivo .htaccess que el formato en que debe leer es utf-8, éste va a tomar el último como el encoding correcto.
El estudio de la codificación utilizada en la web, vino a partir de la idea de implementar el lenguaje chino para la página de VIVOphone, y se llego a la conclusión de que para poder tener caracteres chinos (o de cualquier idioma existente) había que utilizar el encoding UTF8. Éste es el encoding más completo que hay actualmente y con el que se realizan todas las web multiidiomas.
El tema del encoding es bastante complejo y amplio, aquí explico, según lo que estudie, básicamente como me funciono a mí bajo las configuraciones actuales del servidor de producción en VIVOphone.
¿Cómo especificar el encoding que quiero utilizar?
Aquí hay una guía muy buena de encoding http://www.w3.org/International/questions/qa-htaccess-charset
Archivo .htaccess
Para especificar un encoding en archivos .htaccess, solo debe crear el archivo .htaccess (si todavía no existe) y agregar la siguiente línea:
AddDefaultCharset UTF-8
Si quiere que solo el encoding que especifique sea utilizado en una sola carpeta, cree el archivo .htaccess en dicha carpeta y agregue la misma línea. Solo tomara los cambios de encoding para esa carpeta.
Configuración del Servidor
No pude conseguir como se hace. El servidor de la página en q estaba trabajando específicamente tiene por defecto el encoding iso-8859-1, por lo tanto si especifica a través del documento XHTML otro encoding, no va a funcionar. Debe ser especificado por el archivo .htaccess para que pueda ser leído con el encoding que quiera.
Encoding por Meta Tags
En el archivo que esta escribiendo, debe especificar el encoding a través del siguiente meta tag:
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
Si desea cambiar el encoding a utf8 puede colocar utf-8 después de la palabra charset, quedando de la siguiente manera:
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
Esto debe ir dentro del tag head. Generalmente se escribe la siguiente cabecera completa:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset= utf-8″ />
<title>Titulo del documento</title>
</head>
Encoding para MySQL
Al igual que hay que especificar un encoding en la web, también hay que hacerlo para la BD. Generalmente se especifica al momento de crear la tabla o la BD. Al momento de crear la base de datos debe especificar que desea utilizar el encoding utf8 — UTF-8 Unicode.
Al crear una tabla, ésta toma el encoding original de su base de datos en caso de que esto no se especifique. En caso de que este trabajando con una BD con encoding diferente al que desea, solo debe especificarlo al momento de crear la tabla. Igualmente seleccione utf8 — UTF-8 Unicode como el encoding o Charset.
Al momento de utilizar cualquier tabla que su encoding sea diferente al de la BD, se debe especificar el siguiente código, luego de realizar la conexión y la selección de la BD (mysql_connect – mysql_select_db) y antes de hacer cualquier query:
mysql_query(“SET CHARACTER SET utf8″);
mysql_query(“SET NAMES utf8″);
yo como no soy programador esto no me afecta directamente (a veces sí) pero cuando hago parsers de php a xml debo utilizar UTF-8 A JURO pues me dan peos los caracteres locos del español
Todavía no he trabajado php directamente con XML. Si bueno, ahorita yo se esta acostumbrando a dejar como estándar trabajar con encoding UTF8. Soporta todos los caracteres.
Por cierto, es codificacion no condificacion
Hola…
Después de volverme loco con los encodings he encontrado la solucón agregando el mysql_query(“SET CHARACTER SET utf8″); mysql_query(“SET NAMES utf8″);
MUCHAS GRACIAS !!!!
Mi problema era que mi Base de Datos viene con un encoding por defecto que no podia cambiar a utf8.
Gracias de nuevo.
Miguel Disculpa que no habia aceptado tu comentario, tengo un poco descuidado el blog, me alegro poder haberte ayudado jeje saludos!
Por cierto, traté de hacer la codificacion directamente desde el navegador, incrustando
Funciona bien, pero me retorna unos caracteres medio raros cuando conecto con la base de datos en sql
aparece “”, alguien sabe porque sale eso y como se soluciona?
Esteban
http://www.HacerFortuna.com
Blog de Negocios de Ecuador
Hola Esteban,
Intenta poniendo este script antes de agarrar los datos de la db:
mysql_query(”SET CHARACTER SET utf8″);
mysql_query(”SET NAMES utf8″);
Saludos