Ho un sito multilingua codificato in utf-8.
Il mio problema è che quando, tramite una query sql inserisco del testo in cinese contenuto in una casella di testo nel database per poi ripescarlo, viene visualizzato con una serie di punti di domanda.
La connessione al db, contenuta nel file di configurazione incluso da tutte le pagine, l'ho impostata in questo modo
Codice PHP:
$db_username='xxxxxxxx';
$db_password='xxxxxxxxxx';
$db_host='xxxxxxxxxxxx';
$db=mysql_connect("$db_host","$db_username","$db_password") or die(mysql_error());
$db_select = mysql_selectdb("xxxxxxxxxx") or die(mysql_error());
mysql_query("SET NAMES 'utf8'", $db) or die("Errore: ".mysql_error());
mysql_query("SET CHARACTER SET 'utf8'", $db) or die("Errore: ".mysql_error());
Nella head di tutte le pagine ho scritto questo codice
Codice PHP:
header("Content-Type: text/html; charset=utf-8");
La query al db è questa
Codice PHP:
$str_sql = "INSERT INTO tabella(uno,due,tre,control,time) VALUES('$uno','$due','$tre','$control','$time')";
mysql_query($str_sql) or die("Errore: ".mysql_error());
La stringa mi arriva codificata in utf-8 dalla casella di testo. Lo so perchè per contarne il numero di caratteri uso questa apposita funzione
Codice PHP:
function utf8_strlen($str) {
$str = stripslashes($str);
$count = 0;
for ($i = 0; $i < strlen($str); ++$i) {
if ((ord($str[$i]) & 0xC0) != 0x80) {
++$count;
}
}
return $count;
}
Per quanto riguarda MySQL, ha queste impostazioni
Set di caratteri MySQL: UTF-8 Unicode (utf8)
collazione della connessione di MySQL: utf8_unicode_ci
La collation delle colonne della tabella è utf8_general_ci.
In locale funzionava tutto bene, i problemi li ho sull'host!