Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/04/2008, 09:05
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: problema de encoding dependiendo de la entrada, trato de entender...

Te escribo como usuario, no como técnico, pero sí con cierta experiencia en UTF-8 con PHP y MySQL (tengo que escribir textos en griego antiguo, ordenarlos, etc.).
El charset de la base, del servidor MySQL, es el conjunto de caracteres, concretamente UNICODE (en sus distintas familias, como es UTF-8), aunque pueden ser otros, claro, como ISO-8859-1; según creo, las tablas y campos lo que tienen es collation, en realidad se selecciona una parte del conjunto de caracteres con reglas específicas para ordenar, comparar datos, etc. Un ejemplo: tú tienes la base en unicode UTF-8, y si no especificas la colación para las tablas y campos, MySQL pondrá el grupo de caracteres por defecto latin... lo que sea (los terminados en ci indican case insensitive, es decir, que no distinguen entre mayúsculas, minúsculas, acentos, etc., algo que puede ser útil para determinadas consultas), pero el charset sigue siendo UTF-8 y sólo a efectos de ordenación, comparación de datos, etc., funciona la colación.
Si tienes bien configurado el charset de la base y collations apropiadas de tablas y campos, por lo que se refiere a la base está todo hecho, pero recuerda que tienes un Apache, el Navegador, el programa php y los documentos .html, .php etc.
Debes hacer que la información llegue a través de Apache en el charset utf-8, pues es Apache quien le indica al navegador la codificación y por defecto le indica ISO-8859-1; la información debe ser procesada con PHP en el charset UTF-8, y que sea mostrada en archivos con codificación UTF-8 (me refiero a los archivos con terminación html, php, etc.). Piensa que el Defaultcharset de Apache no es utf-8, y tampoco el de PHP.
Por tanto, te conviene vigilar varias cosas si no quieres volverte loco.
Te aconsejo que le eches un vistazo a este post con información concreta y alguna recomendación
http://www.php-hispano.net/foros/MySQL/26396
y sobre todo a este otro (está en francés), pues recoge todo o casi todo lo que puede ocurrirte si trabajas con PHP y MySQL
http://electron-libre.fassnet.net/utf8.php
Yo te diré que con algunos truquillos recogidos en el primer enlace resolví la mayor parte de mis problemas (codificación UTF-8 de la base, colación apropiada de tablas y campos;
codificación UTF-8 de los documentos html y PHP, usando además metatags para indicar el charset en los archivos html; codificación utf-8 por defecto en PHP; y para evitar cualquier problema en la conexión que se establece entre la base de datos y el PHP mediante Apache usar la fórmula cuasi mágica en PHP mysql_query ("SET NAMES 'utf8'"); tras hacer la conexión a la base.
Con eso estaría casi todo, aunque hay que tener en cuenta que muchas funciones de PHP no trabajan con UTF-8 y alguna otra cosilla.
Espero no haber dicho muchas tonterías, pero así lo he entendido yo.
Un ejemplo de lo que digo: si tú tienes un archivo de texto y quieres cargar los datos en una base de datos como MysQL con LOAD DATA debes vigilar, si tienes la codificación UTF-8 en el servidor y la colación en las tablas, que el archivo de texto tenga esa misma codificación, pues en caso contrario te cargará pero cortará las palabras con acentos, etc.
Suerte

Última edición por jurena; 03/04/2008 a las 09:12