due chiacchiere

Cambiare il set dei caratteri in WordPress

L’altro giorno mi apprestavo a rispondere ad un commento di Emanuele, che mi chiedeva se il dirimpettaio era consapevole che la sua casa era immortalata 24/7 nella pagina che mostrava la diretta dalla mia finestra. Mentre digitavo la mia risposta, ho inserito un emoji “nativo” (🤫 per la precisione), non un emoticon digitato con parentesi e punteggiatura varia. Dopo aver salvato il commento, ho notato che WordPress l’aveva convertito in un laconico punto interrogativo. Secondo te potevo lasciar cadere la faccenda nel vuoto? Così ho fatto un po’ di ricerca, ed ho scoperto che questo blog è così vecchio che quando è nato gli emoji non erano ancora inseriti nel set dei caratteri universali. In parole più tecniche, la codifica associata alle tabelle nella base di dati era ferma a latin1_swedish_ci mentre ora si usa utf8mb4.

Tante emoji allineate in una griglia: sorriso, diavoletto, cuoricini, e via dicendo

Sin dall’inizio, il set di caratteri UTF-8 era incluso nel latin1, ma quest’ultimo aveva molte limitazioni, tra cui la mancanza dei codici per tutti gli emoji resi popolari dai cellulari intelligenti all’inizio dello scorso decennio. Così gli sviluppatori si misero al lavoro, ed alla fine del 2010 rilasciarono MySQL 5.5, che estendeva la codifica al nuovo formato utf8mb4, tentando anche di aprire la porta all’oriente con l’introduzione di caratteri cinesi, giapponesi e coreani. WordPress si adeguò ben presto, e con il rilascio della version 4.4 aggiunse il supporto per questo nuovo set di caratteri, che diventò lo standard per le nuove installazioni. Sfortunatamente, la conversione di tabelle pre-esistenti non si poteva facilmente automatizzare, quindi i blog che usavano il vecchio formato non furono aggiornati.

Per aggiornare il tuo sito, collegati al pannello di controllo del tuo provider ed apri PhpMyAdmin per il database associato al blog. Usando le apposite funzioni all’interno della schermata “Operazioni” fai una copia di sicurezza delle tabelle wp_posts e wp_comments (tieni conto che il prefisso potrebbe essere diverso nel tuo caso), chiamandole ad esempio wp_posts_copia e wp_comments_copia. A questo punto copia ed incolla i seguenti comandi nel campo SQL:

ALTER TABLE wp_posts ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_comments ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Queste operazioni potrebbero richiedere un po’ di tempo, se hai svariate migliaia di post nel tuo database, quindi porta pazienza e lascia che il sistema faccia il suo lavoro. Nel frattempo, apri il file wp-config.php nella cartella principale del sito sul server, ed aggiungi questa stringa verso la fine:

define( 'DB_CHARSET', 'utf8mb4' );

Se una definizione simile esiste già, ti basterà semplicemente aggiornare il valore ad utf8mb4. A questo punto, se tutto è andato bene, post e commenti dovrebbero continuare a vedersi sul sito senza strani caratteri illeggibili (specialmente le lettere accentate), e l’aggiunta di un emoji non dovrebbe più causare l’apparizione di fastidiosi punti interrogativi.

Visto che ci sei, potresti provare a lasciare un commento con qualche emoji per vedere se tutto funziona a dovere con vari browser? Mi raccomando, però, mettici un po’ d’impegno!

Commenti

  1. kOoLiNuS ha detto:

    Grazie!
    Questa cosa, spiegata in maniera così lineare, mi sarebbe servita tempo fa… quando mi sono ritrovato a migrare due siti WordPress molto “antichi” da un server ad un altro decisamente più moderno.

    1. camu ha detto:

      Si, anche io non me n’ero mai accorto in questi anni, quando ho installato nuovi WordPress per i miei progetti. Spero possa essere utile a qualcuno, anche se oramai i blog “preistorici” sono davvero pochi…

Lascia un commento