Caractere ciudate - deși totul este UTF-8

3 aug. 2014, 07:51:37
Vizualizări: 35.3K
Voturi: 8

Nu sunt sigur de ce acest subiect a fost închis, dar aceasta este aceeași problemă care afectează mulți utilizatori.

Toate setările mele de configurare WP sunt în ordine:

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

Am încercat chiar să le activez una câte una. Niciuna nu a funcționat.

Când salvez o postare, apar caractere ciudate în locul apostrofurilor și spațiilor. Acest lucru se întâmplă indiferent dacă scriu conținutul manual sau

Am încercat câteva plugin-uri.

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

..etc.

Niciunul dintre ele nu funcționează. Problema persistă.

Am modificat și setul de caractere și colația bazei de date în MySQL. Captură de ecran:

Tabelele/coloanele MySQL sunt toate utf-8

Aceasta este o captură de ecran când introduc conținut prin copiere:

Textul este în regulă la introducerea în interfața WP

Dar imediat după salvare, textul apare cu caractere amestecate care l-au înlocuit:

Caractere amestecate enervante

Ce altceva?

Am trecut prin procesul de a exporta întreaga bază de date MySQL, apoi am eliminat toate caracterele non-utf8 mai vechi prin comanda TR.

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

Unde file-with-binary-chars era dump-ul MySQL. Apoi am restaurat tabelul.

Configurația mea MySQL este complet utf8:

[client]
default-character-set=utf8

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

Browserul meu este Chrome. Codificarea este UTF-8 (în meniul VIEW).

Ce altceva pot face? Trebuie să fac și toate fișierele plugin-urilor utf-8?

FYI, acest blog este unul dintre blogurile WordPress. Există alte instalări WordPress mai noi pe același server folosind aceeași instalare de MySQL 5.6.17, dar acestea nu au o astfel de problemă. Presupunerea mea este că, fiind un blog mai vechi, poate avea unele variații în textul introdus cu mult timp în urmă, dar sincer, după ce am făcut toate cele de mai sus, chiar nu știu ce altceva pot face.

Mulțumesc pentru orice sugestii sau indicații!

1
Comentarii

Doar pentru a adăuga, acum m-am asigurat că toate fișierele pluginurilor și temelor au textul în UTF8. Acesta este codul pe care l-am folosit: https://gist.github.com/anonymous/6761e2142c214fb6ef4a

PKHunter PKHunter
3 aug. 2014 08:09:33
Toate răspunsurile la întrebare 6
1

Aceasta problemă apare de obicei când copiați/lipești informații din Microsoft Word în editorul de conținut WordPress. WordPress folosește așa-numitele "Ghilimele inteligente", prin intermediul unei funcții numite wptexturize().

Soluția ideală

Soluția ideală ar fi să revizuiți conținutul și să înlocuiți toate ghilimelele simple/duble folosind tastatura.

Totuși, dacă lucrați cu cantități mari de text copiat/lipește, acest lucru poate să nu fie fezabil.

Dezactivarea filtrului wptexturize()

O altă opțiune este să dezactivați filtrul wptexturize(); acest lucru poate fi realizat prin adăugarea următorului cod în fișierul functions.php al temei child:

remove_filter('the_content', 'wptexturize');

De asemenea, poate doriți să eliminați filtrul din comentarii și/sau rezumate:

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

Sau pentru titluri:

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

Curățarea bazei de date

Pentru conținutul existent care are deja caractere "ciudate" salvate în baza de date; poate fi necesar să curățați baza de date rulând următoarele interogări din PHPMyAdmin (asigurați-vă că faceți mai întâi o copie de rezervă a bazei de date):

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-uri

Ei bine... este WordPress. Puteți folosi întotdeauna un plugin pentru a vă ajuta să gestionați filtrul wptexturize(). Aruncați o privire peste această listă și vedeți dacă găsiți unul potrivit pentru dumneavoastră.

3 aug. 2014 18:09:29
Comentarii

Mulțumesc pentru acest post foarte informativ și ai dreptate, ghilimelele cauzează aceste probleme. Dar nu sunt singurele responsabile. Uneori, doar spațiul dinaintea și de după un punct poate conține aceste caractere ciudate. În al doilea rând, este clar că ceva nu funcționează cum trebuie, deoarece acest lucru nu se întâmplă pe niciun alt blog de pe exact același server, care folosește aceeași instalare de bază a MySQL și toate celelalte componente. Fișierele de configurare sunt destul de similare de asemenea.

PKHunter PKHunter
4 aug. 2014 09:00:10
2

Am avut exact aceeași problemă.

Am încercat tot, exact ca tine, și la final am mai încercat un ultim lucru.

Am schimbat DB_CHARSET în fișierul wp-config la latin1.

Și lucrurile au funcționat :/

define('DB_CHARSET', 'latin1');
define('DB_COLLATE', 'utf8mb4_general_ci');
23 iul. 2018 08:14:52
Comentarii

A funcționat excelent pentru mine. O observație, cred că este recomandabil să folosești utf8mb4_unicode_ci conform informațiilor din acest articol. Cel puțin, opțiunile sunt prezentate clar aici pentru ca fiecare să poată lua propria decizie.

Zachary Dow Zachary Dow
25 oct. 2018 21:03:36

@ZacharyDow exact... Și depinde de configurația personală a fiecăruia.

vs_lala vs_lala
3 nov. 2018 15:19:55
0

În alt caz, dacă utilizați PHP Dom (loadHTML) undeva, este nevoie să încărcați HTML ca UTF-8. Am reparat acest lucru prin:

Înlocuirea

@$dom->loadHTML($html);

cu

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

Următoarea soluție a funcționat pentru mine, așa că o postez aici pentru a o împărtăși. Chiar dacă am rulat actualizările SQL sugerate, tot primeam acele simboluri ciudate înaintea link-urilor "citește mai mult".

Sunt complet surprins. După ore încercând diverse soluții și testând, am găsit în sfârșit opțiunea "Setări", apoi "Citire" mai jos: "Codificare pentru pagini și fluxuri". După ce am schimbat de la UTF-7 la UTF-8, totul arată din nou normal.

imagine ilustrând setările de codificare

Și chiar mai ciudat, după ce am schimbat la UTF-8, opțiunea a dispărut din pagină. Conform site-ului WordPress, această opțiune a fost eliminată începând cu versiunea 3.5.

15 nov. 2017 01:29:08
Comentarii

Mulțumesc @Neal, am rezolvat și eu problema cu această soluție!

Hemã Vidal Hemã Vidal
13 aug. 2018 23:20:10
1

Problema poate fi cauzată de plugin-uri și încărcări directe prin FTP.

Detalii mai jos:

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

10 sept. 2016 03:13:39
Comentarii

Te rog să adaugi esența soluției dacă nu totul, astfel încât chiar dacă linkul nu mai funcționează, acest răspuns să rămână valabil.

bravokeyl bravokeyl
10 sept. 2016 08:15:30
0

În cazul meu, caracterele ciudate nu au fost scrise în baza de date. Verifică dacă SQL-ul brut afișează și el caracterele incorecte. Dacă vezi apostroafe normale în baza de date, comentează următoarele două linii din wp-config.php:

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

Asta a rezolvat problema pentru mine imediat.

"Această problemă de codare a caracterelor poate apărea după o actualizare a bazei de date" - Link

6 ian. 2021 23:33:17