2011-01-19 15 views
7

Estoy usando PHP conectando a una base de datos MySQL para crear un archivo XML. Todo funciona, excepto por la codificación de caracteres. Necesito tanto caracteres japoneses como ingleses, así que obviamente elegí usar UTF-8. El único problema es que los caracteres japoneses de la base de datos no se muestran correctamente.Problemas al mostrar caracteres japoneses usando PHP y MySQL

La intercalación en la base de datos y las tablas está configurada en UTF8_general_ci, al igual que la intercalación de la conexión MySQL.

Mi archivo php define usar UTF-8 (y se guarda en UTF-8 sin BOM) en 2 lugares diferentes, una vez en el encabezado con la siguiente línea: header ("Content-type: text/xml; charset = utf-8 "); El otro lugar que lo define está en el archivo de salida XML.

Como prueba, he tenido el archivo php para escribir algunos caracteres japoneses solo desde el código, por lo que no proviene de la base de datos. Esto se muestra correctamente (puede verse aquí http://jlearn.0sites.net/Flash/xml/xml.php ... las últimas 5 entradas tienen algunos caracteres japoneses seguidos de signos de interrogación debido a que el japonés proviene de la base de datos).

Así que el problema es probablemente la base de datos pero todo me parece correcto.

¿Alguna idea?

Respuesta

12

en realidad sólo ha publicado esto - php mysql query encoding problem


Lo que tienden a encontrar Resuelve las cosas es mucho;

mysql_query("SET NAMES 'utf8'"); 

Antes de realizar cualquier consulta.

La documentación recomienda que use mysql_set_charset pero a menudo veo que falta esa función.

if(function_exists('mysql_set_charset')){ 
    mysql_set_charset('utf8', $db_con); 
}else{ 
    mysql_query("SET NAMES 'utf8'", $db_con); 
} 
+0

Gracias, funcionó de maravilla. He estado trabajando en eso durante aproximadamente 3 horas y no estaba llegando a ninguna parte. – Musera

+0

¡Ayudó! –

0

Si está utilizando objetos de acceso db, entonces aquí está la solución que funciona para mí

class DB 
{ 
    public $Link; 
    private static $_instance; 

    public static function instance() 
    { 
     if (NULL === self::$_instance) { 
      self::$_instance = new DB; 
     } 
     return self::$_instance; 
    } 

    private function __construct() 
    { 
     $host = 'localhost'; 
     $user = 'your_user_name'; 
     $pass = 'your_password; 
     $db = 'db_name'; 
     $this->Link = new mysqli($host, $user, $pass, $db); 
     $this->Link->set_charset('utf8'); 
    } 
} 
Cuestiones relacionadas