WordPress ed esportazioni di database: è e ’ invece di è e ’

Dopo una migrazione, un aggiornamento o un'esportazione del database i tuoi articoli mostrano all'improvviso è invece di è e ’ invece di ’? Quasi sempre i dati ci sono ancora: vengono solo letti con la codifica sbagliata. Mojibuster ripara l'esportazione; poi correggi la causa nel database.

Funziona con testo e con questi file:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Per esempio esportazioni di Excel, backup di database, sottotitoli o codice di siti web.

Correggi

  1. Trascina un file o incolla il testo
  2. La correzione è automatica
  3. Copia o scarica
oppure trascina semplicemente un file qui
  • Nessun upload. I tuoi file vengono corretti direttamente nel browser e non lasciano mai il tuo dispositivo.

  • Server nell’UE. Mojibuster gira su un server in Finlandia (UE); si applica il Regolamento generale sulla protezione dei dati (GDPR). Testo del GDPR (EUR-Lex)

  • Per aziende e DPO: verifica tu stesso

Come si presenta il problema

Una riga di un dump SQL dopo il cambio di server

Prima

INSERT INTO wp_posts (post_title) VALUES ('Menù del caffè – novità autunnali');

Dopo

INSERT INTO wp_posts (post_title) VALUES ('Menù del caffè – novità autunnali');

Da dove viene

WordPress salva il testo come UTF-8. Molte installazioni più vecchie, però, hanno creato le tabelle in latin1 o si sono collegate con latin1. Finché scrittura e lettura commettono lo stesso errore, nessuno se ne accorge. Dopo il passaggio a un nuovo server, un'esportazione con phpMyAdmin o un cambio del set di caratteri della connessione, ogni lettera accentata diventa all'improvviso due caratteri.

  • DB_CHARSET in wp-config.php è latin1 oppure non corrisponde alle tabelle.
  • Il dump è stato esportato come latin1 e importato come utf8mb4, o viceversa.
  • Un plugin o uno script di importazione ha convertito ancora una volta un testo già rovinato. Nasce così il testo a doppia codifica come è.

Riparare l'esportazione

  1. Fai un backup del database prima di cambiare qualcosa.
  2. Esporta le tabelle interessate come file .sql, ad esempio con phpMyAdmin o con mysqldump --default-character-set=utf8mb4.
  3. Trascina il file nel riquadro qui sopra. Mojibuster ripara solo i punti rovinati e ti mostra ogni modifica.
  4. Scarica il file riparato e importalo con utf8mb4 in un nuovo database di prova.
  5. Controlla il sito. Se tutto è a posto, importalo nel database di produzione.

Il dump non viene mai caricato su alcun server: è importante, perché di solito contiene account utente, indirizzi e-mail e commenti. Altro per le aziende e i responsabili della protezione dei dati.

Attenzione ai dati serializzati

WordPress salva alcune impostazioni in wp_options e wp_postmeta come valori PHP serializzati, ad esempio s:6:"Caffè";. Il numero è la lunghezza in byte. Quando è torna a essere è, la lunghezza non corrisponde più e WordPress scarta il valore. Ripara quindi prima le tabelle dei contenuti come wp_posts, wp_comments e wp_terms. Per le opzioni è meglio wp search-replace di WP-CLI, perché aggiorna le lunghezze.

Correggere la causa in MySQL

  • Porta tabelle e connessione a utf8mb4 e imposta define('DB_CHARSET', 'utf8mb4'); in wp-config.php.
  • Se una colonna latin1 contiene byte UTF-8, non convertirla direttamente: verrebbe codificata una seconda volta. La strada abituale passa da un tipo binario: prima MODIFY … LONGBLOB, poi MODIFY … LONGTEXT CHARACTER SET utf8mb4.
  • Prova ogni modifica prima su una copia del database.

Domande frequenti

Posso riparare un intero database WordPress in una volta?

Sì, anche dump SQL grandi. Attenzione però ai dati serializzati in wp_options e wp_postmeta: WP-CLI li gestisce meglio.

I caratteri corretti nel dump vengono modificati?

No. Mojibuster ripara solo sequenze chiaramente rovinate. Il testo corretto resta com'è.

Che differenza c'è tra utf8 e utf8mb4?

In MySQL utf8 salva solo caratteri fino a tre byte, quindi le emoji si perdono. utf8mb4 è vero UTF-8 ed è la scelta giusta per WordPress.

Funziona anche con sistemi diversi da WordPress?

Sì. Joomla, Drupal, Magento o la tua applicazione su MySQL o MariaDB hanno lo stesso problema e la stessa soluzione.

Altre guide