2011-02-26 29 views
40

Mi página a menudo muestra cosas como à «, Ã, Ã, ù, à en lugar de caracteres normales.¿Cómo convertir estos extraños personajes? (Ã, Ã, Ã, Ã, Ã)

Utilizo utf8 para la página del encabezado y la codificación MySQL. ¿Como sucedió esto?

+0

Necesita agregar más contexto. ¿Dónde aparecen estos personajes, en qué codificación están sus tablas, cómo se ve el código para recuperar los datos ... –

+8

Estas son secuencias UTF-8 cuando se muestran en un sitio web de juego de caracteres Latin-1. La mejor opción es agregar '' a sus páginas, o usar 'header (" Content-Type: text/html; charset = utf-8 ");' en la parte superior de su PHP guiones. Supongo que este no es el caso todavía. – mario

Respuesta

46

Estos son caracteres codificados en utf-8. Use utf8_decode() para convertirlos a caracteres ISO-8859-1 normales.

+4

Esto puede solucionar el problema en cuestión, pero es mucho, mucho mejor tener todas las codificaciones en el proceso en primer lugar. –

+1

Siempre uso utf8_encode() (y mysql_real_escape_string por supuesto) al enviar una cadena a la base de datos. En la página de salida se usa utf8_decode(). Pero dices que está mal, yo no sabía eso, ¿cómo lidiarías con esto? – Ray

+4

utf8_encode() y utf8_decode convierten datos desde y hacia ISO-8859-1. En una configuración moderna de sitio web donde la base de datos, la conexión de la base de datos y la codificación de la página de salida son UTF-8, ya no será necesario realizar esas conversiones. Esa es la forma recomendada al construir proyectos PHP desde cero. Si bien probablemente solucionaría el problema que muestra el OP, solucionar el problema en su raíz (si es posible) es mucho más preferible. –

24

Si ve esos caracteres, probablemente no haya specify the character encoding properly. Porque esos caracteres son el resultado cuando una cadena de varios bytes UTF-8 se interpreta con una codificación de un solo byte como ISO 8859-1 o Windows-1252.

En este caso ë podría codificarse con 0xC3 0xAB que representa el carácter Unicode ë (U + 00EB) en UTF-8.

+0

¿cómo se codifica con 0xC3 0xAB que representa el carácter Unicode ë (U + 00EB) en UTF-8? – Leonardo

+2

El carácter 'ë' tiene el punto de código 0xEB en el juego de caracteres Unicode y está codificado con 0xC3AB en UTF-8. Pero esta secuencia de bytes representa algo diferente cuando se interpreta con una codificación de caracteres diferente. Por ejemplo, en ISO 8859-1 y Windows-1252 representa los dos caracteres 'Ã' (0xC3) y' "' (0xAB). – Gumbo

8

Aunque utf8_decode es una solución útil, prefiero corregir los errores de codificación en la tabla. En mi opinión, es mejor corregir los propios personajes malos que hacer "hacks" en el código. Simplemente haga un replace en el campo sobre la mesa. Para corregir los malos caracteres codificados de OP:

update <table> set <field> = replace(<field>, "ë", "ë") 
update <table> set <field> = replace(<field>, "Ã", "à") 
update <table> set <field> = replace(<field>, "ì", "ì") 
update <table> set <field> = replace(<field>, "ù", "ù") 

Dónde <table> es el nombre de la tabla MySQL y <field> es el nombre de la columna en la tabla. Aquí hay una muy buena lista de verificación para aquellos típicamente mal codificados windows-1252 a utf-8 caracteres ->Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters.

Recuerde hacer una copia de seguridad de su tabla antes de intentar reemplazar cualquier carácter con SQL!

[Sé que esta es una respuesta a una pregunta muy antigua, pero estaba enfrentando el problema una vez más. Algunas máquinas viejas de Windows no codificaron el texto correcto antes de insertarlo en la tabla intercalada utf8_general_ci.]

+0

¿Por qué diablos es esto downvoted?Downvoters: por favor explique su desagrado ... – davidkonrad

Cuestiones relacionadas