2011-01-19 11 views
7

Sto utilizzando la connessione PHP a un database MySQL per creare un file XML. Tutto funziona tranne la codifica dei caratteri. Ho bisogno di caratteri giapponesi e inglesi, quindi ovviamente ho scelto di usare UTF-8. L'unico problema è che i caratteri giapponesi dal database non vengono visualizzati correttamente.Problemi di visualizzazione di caratteri giapponesi utilizzando PHP e MySQL

Le regole di confronto sul database e sulle tabelle sono impostate su UTF8_general_ci, così come le regole di confronto MySQL.

Il mio file php definisce di utilizzare UTF-8 (e viene salvato in UTF-8 senza BOM) in 2 posizioni diverse, una volta nell'intestazione con la seguente riga: intestazione ("Content-type: text/xml; charset = utf-8"); L'altro punto in cui è definito si trova nel file di output XML.

Come test ho avuto il file php scrivere alcuni caratteri giapponesi solo all'interno del codice, quindi non proviene dal database. Questo viene visualizzato correttamente (può essere visto qui http://jlearn.0sites.net/Flash/xml/xml.php ... le ultime 5 voci hanno qualche giapponese seguito da punti interrogativi a causa del giapponese che è destinato a venire dal database).

Quindi il problema è molto probabilmente il database ma tutto mi sembra corretto.

Qualche idea?

risposta

12

In realtà appena pubblicato questo - php mysql query encoding problem


Quello che tendono a trovare Risolve le cose molto è;

mysql_query("SET NAMES 'utf8'"); 

Prima di eseguire qualsiasi query.

La documentazione consiglia di utilizzare mysql_set_charset ma spesso la funzione manca.

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

Grazie, ha funzionato brillantemente. Ci sto lavorando da circa 3 ore e non ho capito dove. – Musera

+0

Per favore, ha aiutato! –

0

Se si utilizza oggetti per l'accesso db, quindi ecco la soluzione che funziona per me

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'); 
    } 
} 
Problemi correlati