jump to navigation

Codificación de Lenguaje (Language Encoding) mayo 6, 2007

Posted by Jorge Pedret 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”&gt;
<html xmlns=”http://www.w3.org/1999/xhtml”&gt;
<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”);

Anuncios

Comentarios»

1. Alex - mayo 7, 2007

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

2. jorgepedret - mayo 7, 2007

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.

3. rantsh - mayo 22, 2007

Por cierto, es codificacion no condificacion

4. Miquel - septiembre 17, 2007

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.

5. jorgepedret - octubre 8, 2007

Miguel Disculpa que no habia aceptado tu comentario, tengo un poco descuidado el blog, me alegro poder haberte ayudado jeje saludos!

6. Esteban - junio 28, 2008

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

7. jorgepedret - junio 30, 2008

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

8. kuoves - enero 22, 2010

Hola…voy a intentar con este codigo… ya que cada vez qu ehabro el editor de html… me aparece un mensaje que no reconoce el encoding..

saludos

9. Lumar - diciembre 4, 2010

De verdad funciona muchas gracias

mysql_query(”SET CHARACTER SET utf8″);
mysql_query(”SET NAMES utf8″);

Antes: 123132ÚÁD3D
Despues: 123132ÚÁD3DC

10. Albeolo - febrero 20, 2011

Hola Jorge, pues nada ando liado con las “eñes”, que me las mezcla con las “enes”, y viceversa: cuando busco un registro con un select que tenga una ñ, me saca además, los que contienen n… ¿sabes algo de esto? te lo agradezco de antemano.
La tabla de la bd está en utf8_unicode_ci, además de cada campo, y luego en el html tengo establecido el charset a utf-8…
Gracias.

Jorge Pedret - febrero 20, 2011

Hola Albe, la verdad que nunca he tenido este problema. Lo unico que se me ocurre ahorita es que te asegures que el markup de tu pagina web sea UTF-8 “” o si estas usando html5 “”. Lo segundo que se me ocurre si eso no funciona, es que forces el utf-8 encoding con php. A lo mejor la function utf8_encode te sirve o te puede guiar en la direccion (http://php.net/manual/en/function.utf8-encode.php). La verdad es que nunca he hecho esto antes, pero espero que te ayude con algo.

Si te sirve de algo, escribelo aqui para que otros se puedan beneficiar tambien 🙂 Gracias y suerte!

Jorge Pedret - febrero 20, 2011

Otra cosa que se me ocurre es que forces el encoding cuando escribes el query. En una busqueda que hice rapidito, me salio la funcion CONVERT de MySQL que tal vez te pueda ayudar (http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html). Me imagino que se usa algo como asi: SELECT * FROM table WHERE name= CONVERT(‘$user_query’ USING utf8);

Avisame si te sirve.


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: