Caratteri strani - nonostante tutto sia in UTF-8

3 ago 2014, 07:51:37
Visualizzazioni: 35.3K
Voti: 8

Non sono sicuro del perché questa discussione sia stata chiusa, ma questo è lo stesso problema che affligge molte persone.

Tutte le mie impostazioni di configurazione WP sono in ordine:

//define('DB_CHARSET', 'utf8');
//define('DB_CHARSET', 'utf8_unicode_ci');
//define('DB_COLLATE', '');

Ho anche provato ad abilitarle una per una. Nessuna ha funzionato.

Quando salvo un post, caratteri strani appaiono al posto degli apostrofi e degli spazi. Questo accade sia che io digiti il contenuto manualmente o meno.

Ho provato alcuni plugin.

  1. UTF-8 Sanitize
  2. Convert WP to UTF-8

..ecc.

Nessuno di essi funziona. Il problema persiste.

Ho anche modificato il set di caratteri e la collation del database in MySQL. Screenshot:

Tabelle/colonne MySQL sono tutte in utf-8

Questo è uno screenshot di quando inserisco del contenuto incollandolo:

Il testo è corretto quando lo si inserisce nell'interfaccia WP

Ma immediatamente dopo il salvataggio, il testo ritorna con caratteri incomprensibili che lo hanno sostituito:

Fastidiosi caratteri incomprensibili

Cos'altro?

Ho seguito la procedura di esportazione dell'intero database MySQL, poi ho rimosso tutti i vecchi caratteri non-utf8 tramite il comando TR.

tr -cd '\11\12\15\40-\176' < file-with-binary-chars > clean-file

Dove file-with-binary-chars era il dump MySQL. Poi ho ripristinato la tabella.

La mia configurazione MySQL è tutta in utf8:

[client]
default-character-set=utf8

[mysqld]
character-set-client=utf8
collation-server=utf8_unicode_ci
character-set-server=utf8

Il mio browser è Chrome. La codifica è UTF-8 (nel menu VISUALIZZA).

Cos'altro posso fare? Devo rendere anche tutti i file dei plugin utf-8?

Per vostra informazione, questo blog è uno dei blog WordPress. Ci sono altre installazioni WordPress più recenti sullo stesso server che utilizzano la stessa installazione di MySQL 5.6.17, ma non hanno questo problema. La mia ipotesi è che essendo questo un blog più vecchio potrebbe avere alcune variazioni nel testo inserito molto tempo fa, ma francamente dopo aver fatto tutto quanto sopra, non so davvero cos'altro posso fare.

Grazie per qualsiasi suggerimento o indicazione!

1
Commenti

Per aggiungere, ora mi sono assicurato che tutti i file dei plugin e dei temi abbiano il testo in UTF8. Questo è il codice che ho usato: https://gist.github.com/anonymous/6761e2142c214fb6ef4a

PKHunter PKHunter
3 ago 2014 08:09:33
Tutte le risposte alla domanda 6
1

Questo problema si verifica tipicamente quando si copia/incolla contenuto da Microsoft Word nell'editor di contenuti di WordPress. WordPress utilizza qualcosa chiamato "Smart Quotes", attraverso una funzione denominata wptexturize().

Soluzione ideale

La soluzione ideale sarebbe quella di rivedere il contenuto e sostituire manualmente tutti gli apici singoli/doppi utilizzando la tastiera.

Tuttavia, se stai lavorando con grandi quantità di testo copiato/incollato, questo potrebbe non essere fattibile.

Disabilitare il filtro wptexturize()

Un'altra opzione è disabilitare il filtro wptexturize(), il che può essere fatto inserendo il seguente codice nel file functions.php del child theme:

remove_filter('the_content', 'wptexturize');

Potresti voler rimuovere il filtro anche dai commenti e/o dagli estratti:

remove_filter('comment_text', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');

O per i titoli:

remove_filter('single_post_title', 'wptexturize');
remove_filter('the_title', 'wptexturize');
remove_filter('wp_title', 'wptexturize');

Pulire il database

Per i contenuti esistenti che hanno già salvato i caratteri "strani" nel database, potrebbe essere necessario pulire il database eseguendo le seguenti query da PHPMyAdmin (assicurati prima di fare un backup del database):

UPDATE wp_posts SET post_content = REPLACE(post_content, '“', '“');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'â€', '”');
UPDATE wp_posts SET post_content = REPLACE(post_content, '’', '’');
UPDATE wp_posts SET post_content = REPLACE(post_content, '‘', '‘');
UPDATE wp_posts SET post_content = REPLACE(post_content, '—', '–');
UPDATE wp_posts SET post_content = REPLACE(post_content, '–', '—');
UPDATE wp_posts SET post_content = REPLACE(post_content, '•', '-');
UPDATE wp_posts SET post_content = REPLACE(post_content, '…', '…');

Plugin

Beh... è WordPress. Puoi sempre usare un plugin per gestire il filtro wptexturize(). Dai un'occhiata a questa lista e vedi se c'è qualcosa che fa al caso tuo.

3 ago 2014 18:09:29
Commenti

Grazie per questo post molto informativo e hai ragione, le virgolette causano questi problemi. Ma non è limitato solo alle virgolette. A volte anche lo spazio prima e dopo un punto presenta questi strani caratteri. In secondo luogo, chiaramente qualcosa da qualche parte non funziona, perché questo non accade su nessun altro blog sullo stesso identico server, utilizzando la stessa installazione base di MySQL e tutto il resto. Anche i file di configurazione sono abbastanza simili.

PKHunter PKHunter
4 ago 2014 09:00:10
2

Anch'io mi sono trovato esattamente con lo stesso problema.

Ho provato tutto proprio come te e alla fine ho tentato un'ultima cosa.

Ho modificato DB_CHARSET nel file wp-config impostandolo su latin1.

E magicamente ha funzionato :/

define('DB_CHARSET', 'latin1');
define('DB_COLLATE', 'utf8mb4_general_ci');
23 lug 2018 08:14:52
Commenti

Questo ha funzionato benissimo per me. Una nota, penso sia consigliabile usare utf8mb4_unicode_ci basandosi sulle informazioni in questo post Almeno, le opzioni sono ben illustrate qui per permettere a chiunque di fare la propria scelta.

Zachary Dow Zachary Dow
25 ott 2018 21:03:36

@ZacharyDow esatto... E dipende anche dalla loro configurazione personale.

vs_lala vs_lala
3 nov 2018 15:19:55
0

In un altro caso, se stai utilizzando PHP Dom (loadHTML) da qualche parte, c'è la necessità di caricare l'HTML come UTF-8. Ho risolto il problema:

Sostituendo

@$dom->loadHTML($html);

con

@$dom->loadHTML('<?xml encoding="UTF-8">' . $html);
25 set 2019 10:24:34
1

Il seguente metodo ha risolto il problema per me, quindi lo condivido qui. Nonostante avessi eseguito gli aggiornamenti SQL suggeriti, continuavo a vedere strani simboli prima dei link "leggi tutto".

Sono rimasto davvero sorpreso. Dopo ore di tentativi e test, ho finalmente trovato l'opzione "Impostazioni" poi "Lettura" qui sotto: "Codifica per pagine e feed". Dopo aver cambiato da UTF-7 a UTF-8, tutto è tornato a visualizzarsi correttamente.

Opzione di codifica UTF in WordPress

Ancora più strano, dopo aver cambiato in UTF-8, l'opzione è scomparsa dalla pagina. Secondo il sito di WordPress, questa opzione è stata rimossa a partire dalla versione 3.5.

15 nov 2017 01:29:08
Commenti

Grazie @Neal, ho risolto anche il mio problema con questa soluzione!

Hemã Vidal Hemã Vidal
13 ago 2018 23:20:10
1

Il problema può essere causato dai plugin e dai caricamenti diretti via FTP.

Ecco i dettagli:

http://iiiji.com/wordpress-appearing-weird-characterscode/

10 set 2016 03:13:39
Commenti

Per favore aggiungi l'essenza della soluzione, se non tutto, in modo che anche se il link non funziona più questa risposta rimanga valida

bravokeyl bravokeyl
10 set 2016 08:15:30
0

Nel mio caso i caratteri strani non venivano scritti nel database. Verifica se anche l'SQL grezzo mostra i caratteri non corretti. Se vedi apostrofi normali nel database, commenta le seguenti due righe nel file wp-config.php:

// define('DB_CHARSET', 'utf8');
// define('DB_COLLATE', '');

Questo ha risolto il problema immediatamente nel mio caso.

"Questo problema di codifica dei caratteri può verificarsi dopo un aggiornamento del database" - Link

6 gen 2021 23:33:17