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:

  1. Fare il backup del vostro database con il comando mysqldump –opt DB_NAME oppure utilizzando phpMyAdmin
  2. Copiate lo script nella cartella wp-content del vostro blog (ad esempio: http://vostrosito.com/blog/wp-content/convert-encoding.php )
  3. Accedete via browser allo script

Ecco alcuni suggerimenti di Davide, utili allo scopo:

  1. 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)
  2. per convertire il set di caratteri, lo script va eseguito solo una volta, e subito dopo cancellato (per sicurezza)
  3. 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.
  4. lo script modifica sia la collation del database che i valori interni allo stesso
  5. 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.


11 Commenti to “Risolvere il problema della visualizzazione errata dei caratteri accentati su Wordpress cambiando il charset da ISO-8859 a UTF-8”

  1. 1
    Barbara ha detto

    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 ) ;)

  2. 2
    Antonio Troise ha detto

    Un passaparola tra blogger niente male ;)

  3. 3
    BiGAlex ha detto

    E’ da un pò che cerco invano di scaricare lo script… mica ne hai una bella copia? :P

    Grazie!
    Alessio

  4. 4
    raDIO ha detto

    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

  5. 5
    Antonio Troise ha detto

    @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! :)

  6. 6
    BiGAlex ha detto

    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! :P

    Ciao!
    Alessio

  7. 7
    Antonio Troise ha detto

    @BiGAlex: grazie per l’utilissima segnalazione… speriamo che raDIO riesca a risolvere il suo problema! :)

  8. 8
    BiGAlex ha detto

    E di che? Grazie a te per la cortesia :P

    Ciao! :)
    Alessio

  9. 9
    raDIO ha detto

    non funziona… :(

  10. 10

    [...] 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 [...]

  11. 11
    Giampaolo ha detto

    Grande!!!

    Ho risolto dopo un lungo pellegrinaggio in rete!!

    Grazie di cuore.

Lascia un messaggio

Il tuo commento:


Chiudi
Invia e-mail