2010-06-28 17 views
7

Estoy trabajando en un sitio en idioma francés construido en CakePHP. He intentado con varias funciones para tratar de convertir el texto en UTF-8 y mostrarlo correctamente, pero hasta ahora no he tenido éxito: las letras acentuadas se muestran como un diamante negro con un signo de interrogación. Se muestran correctamente cuando cambio el conjunto de caracteres en el navegador a ISO-8859-1, pero me gustaría que el sitio sea compatible con UTF-8. He utilizado:Problemas que muestran caracteres acentuados en francés en UTF-8

html_entity_decode ($ string, ENT_QUOTES, 'UTF-8'); htmlspecialchars ($ string, ENT_QUOTES, 'UTF-8'); utf8_encode

pero no cigarro. La página se establece en UTF-8 en la cabecera

Y la base de datos MySQL está usando UTF-8 también. ¿Cómo puedo hacer que los caracteres acentuados se muestren correctamente en UTF-8?

+0

Lo sentimos, no sabía cómo aceptar las respuestas, lo he hecho ahora – igniteflow

+1

en general, no tiene nada que convertir. simplemente almacene el texto del usuario sin ninguna codificación y luego visualícelo nuevamente utilizando solo htmlspecialchars. –

Respuesta

8

Compruebe su @@character_set_results. Por defecto, MySQL usa latin1, no utf8. Pruebe SET NAMES utf8 o mysqli::set_charset.

Actualización: aquí es cómo se puede comprobar los conjuntos de caracteres en uso:

mysql> SHOW VARIABLES LIKE '%char%'; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8      | 
| character_set_connection | utf8      | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8      | 
| character_set_server  | utf8      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

Leer más en dev.mysql.com.

5

Primero: ¡Compruebe la codificación de sus archivos php! Trabajo en Mac, utilizo Coda para programar, y tiene una opción para convertir conjuntos de caracteres, a veces tengo problemas como este y la conversión a UTF-8 siempre los soluciona. Creo que Notepad ++ puede hacer eso en Windows. (Si lo hace en sus archivos PHP, cada cuerdas de ellas no tendrán las funciones, htmlspecialchars()html_entity_decode, etc.)

Segundo: si está utilizando la salida HTML, comprobar si tiene <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> en su cabecera ..

Tercero: Haga lo que @janmoesen dijo en su base de datos MySQL.

Cuéntame algo sobre eso.

+1

eres da man. Nunca pensé que podría ser causado por la codificación del archivo real. –

+0

¡hehehe aprendiendo y enseñando! :) – CuSS

1

Acabo de solucionar un problema muy similar con los caracteres acentuados que no se muestran. Mi tabla de base de datos está codificada en utf-8 y mi encabezado html está configurado correctamente para utf-8.

No había especificado un juego de caracteres para mi conexión MySQL, en mi caso estoy usando PDO.

$this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8;", $username, $password); 

Sin problemas ahora!

Cuestiones relacionadas