Hola.
Estoy teniendo problemas al guardar caracteres con acents y dieresis en mysql. Php envia los caracteres en forma correcta, pero al hacer una consulta parecen caracteres extraños.
La tabla (y los campos) estan en utf-8 tambien uso mysql_real_escape_string() antes del insert y htmlentities() para mostrar los datos.
Cualquier ayuda u orientacion se agradece de antemano.
Checa el encodig de tu database
yo tube algo a si pero use htmlentities() y strreplace()
Podría afectar la codificación en que este el archivo .php??
el encodig del archivoes ASCII
La tabla y los campos estan en utf-8
los datos guardados son:
ñÑ
äëïöü
áéÃóú
âêîôû
cuando deberían ser
ñÑ
äëïöü
áéíóú
âêîôû
Toda la codificación debe coincidir (recomiendo usar UTF-8):
1) Codificación del archivo PHP, revisa que sea la correcta y modifícala si es necesario con el comando “iconv” (revisa el man)
2) El HTML que generas debe tener sus headers correctos y el meta de encoding debe ser correcto a UTF-8 ejemplo:
Si usas XHTML como salida, es recomendable usar:
3) Los archivos y bases de datos que se usen en tu script o aplicación deben estar de preferencia en UTF-8 para evitar convertirlos en tiempo de ejecución, de lo contrario requeriras codificarlos y/o decodificarlos con php utf8_encode y utf8_encode al desplegarlos y/o capturarlos según el caso.
4) revisa que tus conexiones a bases de datos negocien la codificación correcta, eso puede ayudar también.
5) Si usas apache, te puede ayudar también utilizar un .htacces con la directiva específica para codificación:
AddType 'text/html; charset=UTF-8' html
El chiste es ser congruentes todo el tiempo con la codificación utilizada. Inclusive tu shell debe estar ajustado a una codificación que te convenga, ya que si programas con UTF-8 y tu shell (o tu “vi”) usa ISO-8859-1 entonces al editar tus archivos (o al ejecutarlos) verás carácteres extraños y tendras que usar iconv para ajustar tus archivos una vez que los pongas en producción. Si usas “vi” de un archivo en utf8 dentro de un shell ISO8859-1 y de pronto notas caracteres escapados en tu texto puedes probar seteando la variable de ambiente LANG, ejemplo:
LANG=en_US.UTF-8 vi miarchivo
Juega con tus posibilidades y ojo con la codificación… siempre.
demonios!!!! esta cosa no me respeto los tags de código, va de nuez para el punto 2 que debió poner algo así:
2) El HTML que generas debe tener sus headers correctos y el meta de encoding debe ser correcto a UTF-8 ejemplo:
meta content="text/html; charset=UTF-8" http-equiv="content-type"
Si usas XHTML como salida, es recomendable usar:
xml version="1.0" encoding="UTF-8"
recuerda completar los tags del meta y del header de xml, con un carajo esta cosa debería respetar el tag code, o de plano no sé usar wordpress…
Exacto, también el encoding de tu BD y las tablas deben coincidir. Busca en el manual de MySQL la sección que habla de COLLATE.
Para las bases de todo este rollo este artículo es buenisimo:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky
[http://www.joelonsoftware.com/articles/Unicode.html]
Antes de hacer un select, ejecuta un query “SET NAMES UTF8” para que te devuelva correctamente los caracteres.
Mi recomendación es que en tu bootstrap, el primer query después de establecer la conexión sea ese.
Saludos