Buongiorno.
Ho un problema che credo chiunque non sia un principiante come me abbia già incontrato.
ho difficoltà con la codifica utf8 dei dati scritti nel database, probabilmente per un'impostazione sbagliata, o qualcosa da aggiungere o nel codice PDO o nel database stesso, ma non riesco a risolvere.
Ho settato la codifica del database a utf8_general_ci, così come la codifica delle tabella e degli attributi di testo, ed eseguendo la seguente query:
show variables like 'char%';
ottengo:
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 C:\Users\Benny\Documents\SOFTWARE\XAMPP\mysql\shar...
Per quanto riguarda la connessione PDO al database, questo è il codice:
private function db_conn() {
//connect to database 'PDO'
try {
$server ="mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8";
$con = new PDO($server,DB_USER,DB_PASSWORD);
$con->exec("set names utf8");
} catch (PDOException $e) {
if ($_SERVER['HTTP_HOST'] == 'localhost') {
die($e->getMessage());
}else {
die("could not connect to the database");
}
}
return $con;
}
DB_NAME, DB_HOST, eccetera sono definiti in un file di configurazione (che qui non serve, perché la connessione avviene sempre in modo corretto).
Il problema è che se io inserisco del testo in alcune form e tramite una query lo scrivo sul DB, i caratteri speciali tipo è,ò,ù mutano in ù,ì,ò… Ho provato alcune altre impostazioni, tipo inserire l'istruzione che segue prima del try-catch:
header('Content-type: text/html;charset=utf-8');
senza successo.
Una soluzione potrebbe essere quella di correggere i dati in input dal DB con un'apposita function, tipo:
function my_htmlchar($var)
{
$search = array('ì', 'è', 'é', 'ò', 'à', 'ù');
$replace = array('ì', 'è', 'é', 'ò', 'à', 'ù');
$var = str_replace($search, $replace, $var);
return $var;
}
ma non so se funziona, e se poi copra tutti i caratteri errati.
Qualcuno ha una soluzione da propormi?