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.
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 ) 😉
Un passaparola tra blogger niente male 😉
E’ da un pò che cerco invano di scaricare lo script… mica ne hai una bella copia? 😛
Grazie!
Alessio
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
@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! 🙂
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/plugins/wp-utf8-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
@BiGAlex: grazie per l’utilissima segnalazione… speriamo che raDIO riesca a risolvere il suo problema! 🙂
E di che? Grazie a te per la cortesia 😛
Ciao! 🙂
Alessio
non funziona… 🙁
Pingback: Levysoft » Le ricerche diacritiche e key insensitive dei motori di ricerca: cosa sono i segni diacritici, come non vengono usati correttamente nella lingua italiana 17 Marzo 2008
[…] 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 […]
Grande!!!
Ho risolto dopo un lungo pellegrinaggio in rete!!
Grazie di cuore.