Tengo la instalación XAMPP estándar en win7 (x64). Después de haber tenido mi cuota de problemas de codificación en un proyecto anterior donde la codificación de mysql no coincidía con la codificación de php, que a veces daba como resultado html en otras codificaciones, decidí codificar de manera consistente todo usando utf-8.Las páginas html codificadas en UTF-8 muestran (signos de interrogación) en lugar de caracteres
Estoy empezando con el marcado de html y estoy experimentando problemas.
- Mi página se guarda con UTF-8 (sin lista de materiales, creo)
// actualización: Resulta que este no fue el caso. El archivo se guardó realmente conISO_8859-1
. Más tarde descubrí esto gracias a la respuesta de Sherm Pendleys. Tuve que volver atrás y cambiar la configuración de mi proyecto (que estaba configurada a "ISO-8859-1") al "UTF-8" deseado. - php se establece por .htaccess para servir .php-páginas en UTF-8 con:
AddCharset UTF-8 .php
- HTML tiene un meta Especificación de la etiqueta:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- Para probar I sistema usado php
header('Content-Type:text/html; charset=UTF-8');
La página se sirve evidentemente en utf-8 (Firefox y Chrome lo reconocen como tal) pero cualquier carácter especial como é
, á
o ¡
se mostrará como �
. También al ver el código fuente.
Al eliminar la configuración de codificación mencionada anteriormente, todos los caracteres se representan correctamente, pero la codificación que se detecta muestra windows-1252
o ISO-8859-1
según el navegador.
¿Cómo es que? Estoy muy desconcertado. Hubiera esperado el comportamiento exactamente opuesto.
Cualquier consejo es bienvenido, ¡gracias!
edit: Espero que esto ayude un poco más. Esta es la cabecera de respuesta (según Firebug)
HTTP/1.1 200 OK
Date: Sat, 26 Mar 2011 20:49:44 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Content-Length: 91
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
¡Exactamente! Le está diciendo al servidor que diga "charset = utf-8", lo que no es realmente el caso. Los servidores y navegadores son criaturas confiadas. El servidor dirá lo que le diga, y el navegador cree lo que diga el servidor sobre la codificación, incluso si no es verdad. –
En lo que respecta al * where * de donde proceden los datos que no son de utf-8, no hay forma de saber a partir de lo que ha publicado aquí. Si aparece un simple 'echo ("föö"); "como f , eso podría indicar que sus archivos .php se guardan como iso-8859-1. Si los datos se están obteniendo de una base de datos, puede usar mb_detect_encoding () para verificar su codificación. –
Has acertado y me ha señalado al verdadero culpable. ¡Gracias! Parece que el archivo no se guardó como utf-8. Tuve que volver al entorno donde se creó. Allí, oculto en "proyecto". configuración "fue una opción establecida en" ISO-8859-1 ". Cambiar esta opción a" UTF-8 "y guardar los archivos nuevamente me dio los resultados deseados. No es necesario configurar' header(); 'ni modificaciones en la configuración de apaches o * .htaccess *. Un error tonto, realmente. Tanto molesto como gratificante. Gracias Sherm por su respuesta y comentarios! – leugim