Inicio->articulos->Artículos para webmasters->La biblia de utf8 con PHP y MSQL. Primera parte

La biblia de utf8 con PHP y MSQL. Primera parte

Viernes, 04 septiembre de 2009 14:03:14 PM

Uno de los problemas comunes con los que se enfrenta un programador en la programación web en lo que se refiere a la internacionalización de la página. Es decir, que una página sea visible correctamente en varios idiomas, sin importar la ubicación del lector. utf-8 vino para resolver este problema, y a pesar de los años sigue siendo complicado resolver lo que se refiere a la correcta visualización de caracteres.

En esta serie de artículos intentaré explicar desde el principio
todo lo que concierne a este tema.

Los beneficios que traera conocerlo correctamente son:
  1. Visualizacíon correcta de caracteres de nuestras páginas en los distintos navegadores.
  2. Motores de búsquedas internos profesionales, es decir que no distinga a la hora de buscar de mayúsculas de minúsculas ni de caracteres acentuados.
  3. Entendimiento total de las codificaciones de caracteres y sus cotejamientos o colaciones.
Para empezar utf-8 es una codificación de caracteres universal, (unicode transformation format).

Podríamos preguntarnos que es una codificación de caracteres, pero en su lugar voy a intentar explicar de arriba a abajo toda la jerarquía en cuanto a la representación de caracteres se refiere.

La representación visual de un carácter es lo que se conoce como un glifo . Un glifo lo que vemos en pantalla, exáctamente las letras que estás leyendo en este momento. La letra a puede estar representada por muchos tipos de glifos, y la agrupación de glifos de un conjunto de caracteres es lo que se conoce como tipografía, o como les gusta llamar a los programas de edición: fuentes. Quizás no sea una palabra muy conocida, pero podemos acordarnos de petroglifo (

Según la RAE:

glifo.


1. m. Arq. Canal vertical que sirve como elemento decorativo.

Así por ejemplo la fuente Verdana tiene un glifo para la a minúscula, y la fuente Georgia tiene otro glifo para representar la misma letra.

A la agrupación de caracteres de un idioma se le conoce como conjunto de caracteres. Así por ejemplo, las letras en el idioma español serían:

abcdefghijjlmnñopqrstuvwxyz con sus correspondientes mayúsculas ABCDEFGHIJKLMÑNOPQRSTUVWYZ.

Si sumamos los números 0123456789 más los diferentes signos de puntuación tenemos el conjunto de símbolos o caracteres que forman un idioma.

Muchas veces diferentes idiomas o dialectos comparten un mismo símbolo que pueda tener la misma o distinta pronunciación sonora, como puede ser la letra Ç(celdilla),  común en el catalán y en el francés.

Es por eso, que normalmente los conjuntos de caracteres no se corresponden con un país, sino con un conjunto de idiomas y países, ya que diferentes paises pueden tener símbolos en común, y es por lo tanto se agrupan por regiones (uniones de países).

A la agrupación de los símbolos (los caracteres) de distintos idiomas o países se le conoce como conjunto de caracteres o character set en inglés.

Así por ejemplo, un conjunto de caracteres o character set en España puede ser el latin1 como podemos comprobar con el comando SHOW CHARACTER SET en una consola de mysql en en PHPMYADMIN.

Conjuntos de caracteres existen muchísimos.

Según el anterior comando, a España le corresponde latin1:

Character set  Descripción                              Default Collation
latin1             cp1252 West European   latin1_swedish_ci 1
latin2             ISO 8859-2 Central European   latin2_general_ci 1

Podemos ver que latin1 es "Europa occidental".

¿Y qué es Default Collation? ¿O colaciones, como dicen en algunos sitios?
Colación según la rae, en su acepción segunda:

2. f. Cotejo que se hace de una cosa con otra.

Bien. El cotejamiento, o colación es lo siguiente:
A la hora de hacer unas búsquedas, se dan una serie de condiciones para determinar si hay o no coincidencia.

Por defecto, la colación para latin1 es latin1_swedish_ci, que expandido es latin1 swedish case insensitive y traducido latin1 sueco insensible a mayúsculas.

O sea:

Si buscamos cotejamiento, nos encuentra tanto palabras escritas como COTEJAMIENTO o Cotejamiento, es decir, no distingue maýuculas de minúsculas.

Pero en español, tenemos caracteres como la ñ, y caracteres acentuados tales como:
áéíóú y ÁÉÍÓÚ, además de la diéresis ü para palabras como paragüero o cigüeña.

Es por eso que en idioma español necesitamos otra colación distinta.

Si queremos ver las colaciónes que dispone el conjunto de caracteres latin1 hacemos:

mysql> SHOW COLLATION LIKE 'latin1%';
+---------------------+---------+----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+---------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1 | 5 | | | 0 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
| latin1_danish_ci | latin1 | 15 | | | 0 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 1 |
| latin1_general_ci | latin1 | 48 | | | 0 |
| latin1_general_cs | latin1 | 49 | | | 0 |
| latin1_spanish_ci | latin1 | 94 | | | 0 |
+---------------------+---------+----+---------+----------+---------+
en una consola de mysql, o bien en un panel de control PHPMYADMIN.

Podemos ver que latin1 tiene varias colaciones, entre ellas latin1_spanish_ci.

A continuación se pueden ver los significados de las distintas colaciones:

Las colaciones para latin1 tienen los siguientes significados:

Colación Significado
latin1_german1_ci Alemán DIN-1
latin1_swedish_ci Sueco/Finlandés
latin1_danish_ci Danés/Noruego
latin1_german2_ci Alemán DIN-2
latin1_bin Binario según codificación latin1
latin1_general_ci Multilingüe (Europa Occidental)
latin1_general_cs Multilingüe (ISO Europa Occidental), sensible a mayúsculas
latin1_spanish_ci Español moderno

¿Y que es español moderno?

Desde 1994, el idioma español no acepta las letras ch y ll como una sola, de tal forma que el español tradicional era:

acchdefghijjlllmnoprstuvwxyz (español tradicional), y desde 1994 el abecedario es:

acdefghijjlmnoprstuvwxyz (español moderno)

Por lo tanto debemos utilizar español moderno en los nuevos proyectos que realicemos, a menos que por causas muy concretas se requiera el alfabeto español tradicional.

Resumen:
En esta primera parte hemos aprendido desde la base que es:
  1. Una codificación de caracteres
  2. Un cotejamiento de caracteres
  3. Que en español actual hay que usar la colación español moderno.

En la segunda parte veremos como configurar correctamente nuestra base de datos desde el panel de control de PHPMYADMIN para comenzar a utilizar la codifación actual, que debería ser utf-8, en la segunda parte veremos el porqué de esta afirmación.



logo mastercard logo visa logo 4b logo visa electrón logo amercian express

Copyright © 2005-2012 www.introtiendas.com | Atención al cliente: 699 37 31 92 | email:

Diseño web Tenerife. Tiendas virtuales Tenerife. Diseño de páginas webs, soluciones para su PYME

AVISO LEGAL | Contacto | ¿Quienes somos?

Valid XHTML 1.0! Acambiode.comIntercambia con Introtiendas