La scelta della codifica dei caratteri è un aspetto molto importante per la visualizzazione del testo su una pagina web. Ma il più delle volte l'utilizzo di caratteri particolari, come quelli accentati, può creare numerosi problemi.
Durante lo spostamento di un sito (con database) da un server Slackware ad un server CentOS 7 sono incappato in un problema di visualizzazione dei caratteri accentati sulla pagina web.
Nella prima situazione (server Slackware) i caratteri accentati venivano visualizzati correttamente ma nella seconda situazione (CentOS) comparivano sulla pagina gli oramai noti 'punti interrogativi'. Database e tabelle erano configurati in utf-8.
Il mio primo pensiero è andato subito alla configurazione del default_charset di php. Utilizzando php_info() ho controllato che il valore di default fosse settato a utf-8.
Stesso database e stessa codifica ma visualizzazione dei caratteri accentati differente. Ho quindi provato a sostituire (in CentOS) il valore di default con iso-8859-1 ed il problema magicamente è sparito.
Nonostante il problema fosse stato risolto, volevo capire il motivo per cui questo accadeva.
La mia attenzione si è quindi rivolta alla connessione (tramite PDO) che effettuavo al database. E' bastato aggiungere 'charset=utf-8' alle impostazioni di connessione al database ed il problema è scomparso.
mysql:host=$hostname;dbname=$database;charset=utf8
Questa soluzione mi ha così permesso di ottenere lo stesso risultato (visualizzazione corretta dei caratteri accentati) con la stessa configurazione nei due diversi sistemi.