Para que un sistema web funcione correctamente todas las partes que lo componen deben tener la misma codificación de caracteres, para lograr esto comenzaré con la definición de la codificación de caracteres de la base de datos.
Para el motor de base de datos MySql se debe crear una base de datos con las siguientes sentencias.
mysql > CREATE DATABASE nombre_base_datos
DEFAULT CHARACTER SET = nombre_charset
DEFAULT COLLATE = nombre_collation;
o
mysql > CREATE DATABASE nombre_base_datos
DEFAULT charset nombre_charset
DEFAULT COLLATE = nombre_collation;
Para saber cuales son los conjuntos de caracteres soportados por MySql se pueden utilizar cualquiera de las siguientes instrucciones.
mysql > show character set;
o
mysql > show charset;
Los conjuntos de caracteres más utilizados son iso-8859-1 (latin1) y utf-8 (utf8), pero con la sentencia anteriormente escrita se pueden ver todos los conjuntos de caracteres disponibles.
Para saber cuales son las colecciones de datos disponibles para un conjunto de caracteres se puede utilizar la siguiente función.
mysql > show collation like '%utf%';
o
mysql > show collation like '%latin%';
La primera sentencia permite ver las colecciones disponibles para utf8 mientras que la segunda muestra las colecciones disponibles para latin1.
Una vez que la base de datos ha sido creada se puede ver el conjunto de caracteres definido para ella utilizando la siguiente sentencia.
mysql > show create database nombre_base_datos;
Una vez creada la base de datos con la codificación deseada, se deben crear cada una de las tablas que componen la base de datos con la siguiente sentencia.
mysql > CREATE TABLE nombre_tabla
(…)
DEFAULT CHARACTER SET nombre_charset
COLLATE nombre_collation;
o
mysql > CREATE TABLE nombre_tabla
(…)
DEFAULT charset = nombre_charset
COLLATE nombre_collation;
(…) representa la creación de los campos de la tabla.
Luego se puede verificar la codificación de caracteres de la tabla utilizando la siguiente sentencia.
mysql > show create table nombre_tabla;
Ahora que tenemos nuestra base de datos configurada con la codificación de caracteres deseada se debe verificar que cada archivo que contiene los script php estén codificador con el mismo conjunto de caracteres de la base de datos, con esto usted se puede asegurar que cualquier carácter especial escrito en el archivo será interpretado correctamente en el cliente web.
En caso de utilizar VIM para la creación y edición de archivos se puede utilizar la sentencia que se muestra a continuación para definir el conjunto de caracteres que se utilizará en el nuevo archivo, en caso de ser un archivo existente permite modificar el conjunto de caracteres que se utilizará.
:set fenc=iso-8859-1
o
:set fenc=utf-8
La sentencia anterior debe ser ejecutada al interior del editor de textos VIM, es decir, primero se abre el archivo y luego se ejecuta la sentencia anterior. La siguiente sentencia permite crear un archivo o abrir un archivo existente con un conjunto de caracteres definido.
$vi “+e ++enc=iso-8859-1” nombre_archivo
o
$vi “+e ++enc=utf-8” nombre_archivo
La sentencia anterior es ejecutada en la consola de Linux y abre el archivo en VIM con un conjunto de caracteres definido.
En Linux existe una opción que permite saber cual es la codificación de caracteres definida para un archivo existente, de este modo puede decidir conservar el conjunto de caracteres del archivo o modificarla, a continuación se describe la sentencia.
$file –mime-encoding nombre_archivo
Alguna de las respuestas que podemos recibir de la sentencia anterior con una descripción del significado que tiene el conjunto de caracteres definido para el archivo.
iso-8859-1: Archivo con caracteres especiales en latin1.
utf-8: Archivo con caracteres especiales en utf-8.
us-ascci: Archivo sin caracteres especiales. Conjunto de caracteres entre 0 y 127.
binary: Archivo en blanco (sin datos).
Si desea cambiar la codificación de caracteres sin utilizar el editor de texto VIM, Linux permite realizar este cambio con la siguiente sentencia.
$iconv -f codificacion_de_caracteres_actual -t codificacion_caracteres_nueva -o nombre_archivo_salida nombre_archivo_entrada
La codificación de caracteres puede ser:
Ej.
$iconv -f UTF-8 -t ISO_8859-1 -o salida entrada
Una vez que se define la codificación de caracteres de la base de datos y los caracteres que contienen los script php, se debe definir la codificación de caracteres que utilizará por defecto el navegador web donde se desplegará la página. Para esto se debe utilizar la siguiente línea de código en el script php o html que contiene la página web.
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html” charset=”iso-8859-1” />
</head>
<body></body>
</html>
o
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html” charset=”utf-8” />
</head>
<body></body>
</html>
Ahora que el navegador estará configurado para reconocer la codificación de caracteres deseado queda un último paso, definir la codificación de caracteres que se desea utilizar en los formularios necesarios para almacenar los datos en la base de datos. La siguiente línea permite definir la codificación de caracteres del formulario.
<form id=”identificador” method=”post” action=”pagina_web” accept-charset=”iso-8859-1”>
</form>
o
<form id=”identificador” method=”post” action=”pagina_web” accept-charset=”utf-8”>
</form>
Es importante verificar que todos los elementos en los diferentes niveles de un desarrollo web se encuentren en una misma codificación de caracteres.
"Gracias, por compartir tus conocimientos"