Tempo di Lettura: 2 minuti
Il problema della codifica UTF-8 del testo presente nel database WordPress mi ha sempre assillato. In tutti i cambi hosting che ho fatto (tre in tutto) ho sempre riscontrato difficoltà con la visualizzazione dei caratteri accentati, tanto da doverli modificare a mano (o con dei search/replace sull’export del DB).
Il problema si presenta sopratutto nei cambi di hosting da sistemi Windows a quelli *unix (infatti, per esempio, Tophost usa server Windows mentre UpsHost BlooWeb usa server Linux), dove è necessaria la conversione del charset di WordPress da ISO-8859 a UTF-8 per visualizzare correttamente i caratteri accentati.
Ebbene, finalmente qualcuno ha trovato la soluzione e non posso quindi esimermi dal suggerirla anche a voi.
Per automatizzare la conversione, è sufficiente scaricare lo script PHP di Markus Tacker e seguire i seguenti passi:
- Fare il backup del vostro database con il comando mysqldump –opt DB_NAME oppure utilizzando phpMyAdmin
- Copiate lo script nella cartella wp-content del vostro blog (ad esempio: http://vostrosito.com/blog/wp-content/convert-encoding.php )
- Accedete via browser allo script
Ecco alcuni suggerimenti di Davide, utili allo scopo:
- per far funzionare lo script bisogna innanzitutto eliminare la riga die(’Please follow the instructions in ‘ . $_SERVER[’PHP_SELF’]);, rimuovendo la quale si accetta automaticamente la licenza ad inizio script (nel quale sostanzialmente l’autore si solleva da ogni responsabilità per eventuali danni al vostro database)
- per convertire il set di caratteri, lo script va eseguito solo una volta, e subito dopo cancellato (per sicurezza)
- se dopo la conversione (tramite la funzione mb_convert_encoding) compaiono nei titoli carattere non-ascii non validi come “für” (cosa che nei titoli dei feed incontro molto spesso, purtroppo) allora bisogna modificare una riga dello script scrivendo $decode = true; anziché $decode = false; e poi lanciare di nuovo lo script, poiché nel database ci sono dei caratteri utf-8 che vanno decodificati (tramite la funzione utf8_decode), e non convertiti.
- lo script modifica sia la collation del database che i valori interni allo stesso
- alla fine, viene visualizzato il seguente messaggio
Remember to remove this script!
giusto per non fare pasticci (che il backup potrebbe sempre sistemare)
Peccato che tempo fa, bonificai quasi tutti i post del DB con un metodo di ricerca e sostituzione iterativo; procedura un po’ più lunga di questa ma pure sempre funzionale.