Risolvere il problema della visualizzazione errata dei caratteri accentati su Wordpress cambiando il charset da ISO-8859 a UTF-8
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.






Lo script veramente l’ha trovato prima Paolo e poi io ( e l’ho anche usato da li il link su delicious che ha dato l’idea del post a Davide )
6 luglio 2007 alle 18:30 | Rispondi a Barbara
Un passaparola tra blogger niente male
6 luglio 2007 alle 22:40 | Rispondi a Antonio Troise
E’ da un pò che cerco invano di scaricare lo script… mica ne hai una bella copia?
Grazie!
Alessio
14 settembre 2007 alle 18:54 | Rispondi a BiGAlex
ciao ha me la procedura da errore:Fatal error: Call to undefined function: mb_convert_encoding() in …/wp-content/convert-encoding.php on line 120
Non è che potersti postare il tuo metodo iterativo? Anche se è una procedura lunga non è un problema. Grazie
26 settembre 2007 alle 01:13 | Rispondi a raDIO
@raDIO: guarda, è semplice, ma anche lungo. Una volta esportato il DB in un file ASCII, con il tuo editor preferito fai un trova-sostituisci dei caratteri errati e quindi importi il nuovo DB. Ma questa soluzione va bene se hai pochi articoli… altrimenti ti passa la voglia!
26 settembre 2007 alle 14:37 | Rispondi a Antonio Troise
Ho trovato un plugin su wordpress (che non ho provato, risolvendo il problema con lo script consigliato da antonio troise) che potrebbe fare al caso tuo: il link è http://wordpress.org/extend/pl.....-sanitize/ e si chiama utf8-sanitize… puoi configurarlo per sostituire volta per volta i caratteri danneggiati, o trasformare una volta per tutte tutto in unicode.
Fammi sapere se poi funziona!
Ciao!
Alessio
26 settembre 2007 alle 15:19 | Rispondi a BiGAlex
@BiGAlex: grazie per l’utilissima segnalazione… speriamo che raDIO riesca a risolvere il suo problema!
26 settembre 2007 alle 15:32 | Rispondi a Antonio Troise
E di che? Grazie a te per la cortesia
Ciao!
Alessio
26 settembre 2007 alle 15:55 | Rispondi a BiGAlex
non funziona…
26 settembre 2007 alle 18:47 | Rispondi a raDIO
[...] in tale caso, l’utente non visualizzerà sul proprio PC il carattere diacritico (proprio come accade per Wordpress con la codifica UTF-8). In seguito, la codifica fu ampliata a 8 bit, arrivando a 256 [...]
17 marzo 2008 alle 16:32
Grande!!!
Ho risolto dopo un lungo pellegrinaggio in rete!!
Grazie di cuore.
25 novembre 2008 alle 15:32 | Rispondi a Giampaolo