Странные символы - несмотря на использование UTF-8

3 авг. 2014 г., 07:51:37
Просмотры: 35.3K
Голосов: 8

Не понятно, почему эта тема была закрыта, но это та же проблема, с которой сталкиваются многие люди.

Все мои настройки WP в порядке:

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

Я даже пробовал включать их по одному. Ничего не помогло.

Когда я сохраняю пост, странные символы появляются вместо апострофов и пробелов. Это происходит независимо от того, ввожу ли я контент вручную или

Я попробовал несколько плагинов.

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

..и т.д.

Ни один из них не работает. Проблема остается.

Я также изменил набор символов и сопоставление базы данных в MySQL. Скриншот:

Таблицы/столбцы MySQL все в utf-8

Это скриншот того, как я вставляю контент:

Текст выглядит нормально при вводе в интерфейсе WP

Но сразу после сохранения текст возвращается с искаженными символами:

Раздражающие искаженные символы

Что еще?

Я прошел через процедуру дампа всей базы данных MySQL, затем удалил все старые не-utf8 символы с помощью команды TR.

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

Где file-with-binary-chars был дампом MySQL. Затем я восстановил таблицу.

Моя конфигурация MySQL полностью в utf8:

[client]
default-character-set=utf8

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

Мой браузер - Chrome. Кодировка UTF-8 (в меню ПРОСМОТР).

Что еще я могу сделать? Нужно ли также сделать все файлы плагинов в utf-8?

К сведению, этот блог является одним из блогов WordPress. На том же сервере есть другие более новые установки WordPress, использующие ту же установку MySQL 5.6.17, но у них нет такой проблемы. Я предполагаю, что поскольку это более старый блог, в нем могут быть некоторые вариации в тексте, введенном давно, но честно говоря, после того как я сделал все вышеперечисленное, я действительно не знаю, что еще можно сделать.

Спасибо за любые предложения или подсказки!

1
Комментарии

Хочу добавить, что теперь я также убедился, что все файлы плагинов и тем используют кодировку UTF8. Вот код, который я использовал: https://gist.github.com/anonymous/6761e2142c214fb6ef4a

PKHunter PKHunter
3 авг. 2014 г. 08:09:33
Все ответы на вопрос 6
1

Обычно это происходит, когда вы копируете/вставляете текст из MS Word в редактор контента WordPress. WordPress использует так называемые "умные кавычки" с помощью функции wptexturize().

Идеальное решение

Идеальным решением будет пройтись по вашему контенту и заменить все одинарные/двойные кавычки, используя клавиатуру.

Однако, если вы работаете с большими объемами копируемого/вставляемого текста, это может быть нецелесообразно.

Отключение фильтра wptexturize()

Другой вариант - отключить фильтр wptexturize(); это можно сделать, добавив следующий код в файл functions.php вашей дочерней темы:

remove_filter('the_content', 'wptexturize');

Вы также можете отключить фильтр для комментариев и/или анонсов:

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

Или для заголовков:

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

Очистка базы данных

Для существующего контента, где "странные" символы уже сохранены в базе данных, вам может потребоваться очистить базу данных, выполнив следующие запросы через PHPMyAdmin (не забудьте сначала сделать резервную копию базы данных):

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, '…', '…');

Плагины

Ну... это же WordPress. Вы всегда можете использовать плагин для управления фильтром wptexturize(). Посмотрите этот список и выберите подходящий для вас.

3 авг. 2014 г. 18:09:29
Комментарии

Спасибо за этот очень информативный пост, и вы правы — кавычки действительно вызывают эти проблемы. Но дело не только в кавычках. Иногда даже пробелы до и после точки содержат эти странные символы. Во-вторых, очевидно, что-то где-то работает неправильно, потому что этого не происходит ни на одном другом блоге на том же самом сервере, использующем такую же базовую установку MySQL и всё остальное. Конфигурационные файлы тоже весьма похожи.

PKHunter PKHunter
4 авг. 2014 г. 09:00:10
2

Я столкнулся с точно такой же проблемой.

Я перепробовал всё, как и вы, и в конце попробовал последнее.

Изменил DB_CHARSET в файле wp-config на latin1.

И это сработало :/

define('DB_CHARSET', 'latin1');
define('DB_COLLATE', 'utf8mb4_general_ci');
23 июл. 2018 г. 08:14:52
Комментарии

Это отлично сработало для меня. Одно замечание: я считаю, что лучше использовать utf8mb4_unicode_ci, основываясь на информации в этой статье. Как минимум, здесь хорошо изложены варианты, чтобы каждый мог сам принять решение.

Zachary Dow Zachary Dow
25 окт. 2018 г. 21:03:36

@ZacharyDow именно... И это действительно зависит от их личной настройки.

vs_lala vs_lala
3 нояб. 2018 г. 15:19:55
0

В другом случае, если вы используете PHP Dom (loadHTML) где-то в коде, может потребоваться загрузка HTML в кодировке UTF-8. Я исправил это следующим образом:

Заменив

@$dom->loadHTML($html);

на

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

Следующее решение помогло мне, поэтому публикую его здесь, чтобы поделиться. Несмотря на то, что я выполнил предложенные SQL-запросы, перед ссылками "читать далее" всё равно появлялись странные символы.

Я был совершенно шокирован. После нескольких часов проб и тестов я наконец нашёл в "Настройках" раздел "Чтение" и опцию ниже: "Кодировка для страниц и фидов". После изменения с UTF-7 на UTF-8 всё снова стало отображаться корректно.

Настройки кодировки в WordPress

И что ещё страннее - после изменения на UTF-8 эта опция исчезла со страницы. Согласно сайту WordPress, эта опция была удалена начиная с версии 3.5.

15 нояб. 2017 г. 01:29:08
Комментарии

Спасибо @Neal, я тоже решил свою проблему с этим решением!

Hemã Vidal Hemã Vidal
13 авг. 2018 г. 23:20:10
1

Проблема может быть вызвана плагинами и прямыми загрузками через FTP.

Подробности:

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

10 сент. 2016 г. 03:13:39
Комментарии

Пожалуйста, добавьте суть решения, если не всё, чтобы даже если ссылка умрёт, этот ответ оставался полезным

bravokeyl bravokeyl
10 сент. 2016 г. 08:15:30
0

В моем случае странные символы не записывались в базу данных. Проверьте, отображаются ли некорректные символы и в сыром SQL-запросе. Если вы видите обычные апострофы в базе данных, закомментируйте следующие две строки в файле wp-config.php:

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

Это сразу же решило проблему в моем случае.

"Эта проблема с кодировкой символов может возникнуть после обновления базы данных" - Ссылка

6 янв. 2021 г. 23:33:17