Salve,
ho un problema con la codifica utf8 dei dati letti da database, probabilmente per un'impostazione sbagliata o una svista, ma non riesco a risolvere. Ho impostato il database in locale sul mio pc nello stesso modo di quello su Altervista e in locale funziona tutto, mentre caricando i file su Altervista ho riscontrato degli errori nella lettura e inserimento dei caratteri speciali. Ho settato la codifica del database a utf8_general_ci, così come la codifica delle tabella e degli attributi di testo, ed eseguendo la queryil database risponde conCodice:show variables like 'char%';
I caratteri speciali inseriti a mano nel database vengono visualizzati correttamente, ma quando provo a leggerli hanno una codifica sbagliata. Infatti provando a eseguire questo file php su una tabella con la sola riga 'Sì' ho l'output mostrato a fianco di ogni stampa:Codice:character_set_client | utf8mb4
character_set_connection | utf8mb4
character_set_database | utf8
character_set_filesystem | binary
character_set_results | utf8mb4
character_set_server | latin1
character_set_system | utf8
character_sets_dir | /usr/share/mysql/charsets/
Ovvero funziona se uso utf8_encode, altrimenti mi stampa i caratteri sbagliati e json_encode non restituisce niente, quindi sembrerebbe un problema di comunicazione perché il valore che leggo non è in utf8, nonostante abbia impostato la connessione con charset=utf8. Sapete dirmi come mai in locale funziona tutto mentre su Altervista c'è questo problema? Come posso risolvere senza dover usare la funzione utf8_encode ovunque nel sito?Codice PHP:
header('Content-type: text/html; charset=utf-8');
try {
$dbh = new PDO("mysql:host=localhost;dbname=$db;charset=utf8", $user, $pass);
foreach($dbh->query("SELECT field from table") as $row) {
echo($row["field"]); //S�
echo json_encode($row["field"]); //
echo(utf8_encode($row["field"])); //Sì
echo json_encode(utf8_encode($row["field"])); //"S\u00ec"
}
} catch (PDOException $e) {
die("Error!: " . $e->getMessage() . "\n");
}
Grazie