Специальные символы в WordPress UTF-8
У меня проблема со специальными символами, которые отображаются некорректно на фронтенде. В основном они преобразуются в знаки вопроса или что-то вроде �?
Пример - Frédèric становится Fr�d�ric.
Некоторые факты, которые меня озадачили:
Этот WordPress установлен на ЛОКАЛЬНОЙ машине и делит сервер как минимум с 40 другими установками — ни у одной из которых нет этой проблемы.
Эта установка WordPress также использует ту же базу данных, что и другие.
Мой файл wp-config имеет определенные кодировку и collate.
База данных в порядке, потому что когда я просматриваю запись в РЕДАКТОРЕ (бэкенде) — всё корректно, проблема только на ФРОНТЕНДЕ.
- База данных в порядке (2) — при открытии записи в phpMyAdmin и проверке значения напрямую все символы отображаются правильно.
Эта проблема НЕ связана с кодировкой браузера/ОС, проверялось на 4 разных машинах, 3 ОС и 9 браузерах.
Я перепробовал все известные мне решения из прошлого опыта, включая:
- Проверку wp-config (всё в порядке, utf-8 определена, collate корректна)
- Проверку базы данных — всё UTF-8
- Проверку заголовка
(<?php bloginfo('charset'); ?>
) — он корректно отображается как utf-8 с валидной разметкой. - Открытие всех файлов темы в редакторе, конвертацию кодировки в UTF-8 без BOM и сохранение.
Может, я что-то упустил? Есть идеи?

Редактирование:
Есть ли у вас <meta charset="utf-8" />
в теге <head>
? Пользователь здесь решил похожую проблему с кодировкой символов, добавив это.
На самом деле, при поиске utf-8 character encoding in wordpress
можно найти много результатов в Google.
Также, имеет ли значение, если вставить текст в HTML-режим редактора и сохранить его?
Следующее не очень хорошая идея, как объяснил @toscho в комментариях.
Не уверен, что это лучший способ решения проблемы, но это сработало для одного из сайтов моего клиента.
Найдите эти две строки в вашем файле wp-config.php
:
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
И закомментируйте их следующим образом:
//define('DB_CHARSET', 'utf8');
//define('DB_COLLATE', '');

Теперь вы рискуете получить смешанные сохранённые кодировки. Не лучшая идея.

@toscho Верно, я ищу в интернете лучшее решение и скоро обновлю свой ответ.
