Лечение ??? вместо кириллицы на MODx

28.10.2013

Марина Лебедева

Приступив к работе над новым проектом, используя MODx Revolution, была получена следующая ошибка:

Всюду, где есть буквы на кириллице получали при сохранении, да и при выводе на страницу, знаки вопроса.

Конечно же, это совершенно не годится на русскоязычном сайте, а хотя… В общем мы решили:

«Казнить, нельзя помиловать»

Как и все нормальные ребята, мы полезли в интернет искать решение, нашли одно, но для него необходимо полностью сносить MODx со всеми наработками, делать магию и устанавливать заново — решение, конечно, отличное так себе, оно некрасивое, да оооочень сильно смахивает на подпорку для велосипеда.

Так мы снова пришли к выводу, что надо делать всё самим — более рационально и тонко, и что очень важно, быстро. Итак, что делаем для решения

1) Лезем в Система → Настройки системы и проверяем стоит ли UTF-8 в следующем параметре, если нет, то ставим:


2) С админкой мы закончили, теперь отправляемся в phpMyAdmin/Chive прямиком в базу данных, которая подключена к сайту MODx и очень внимательно смотрим в столбец «Сравнение». Видите ли во всех значениях utf_general_ci? Нет? Видите latin1_general_ci (кодировка по-умолчанию в MODx) или нечто подобное?
Вот она наша проблема символов «???» вместо кириллицы на сайте.

Проблему мы нашли, но надо же это исправить 🙂 Дело в том, что через интерфейс phpMyAdmin заменить вариант сравнения мы не можем (1. да, там есть вкладка Операции → Сравнение, значение этого поля будет применяться только новым таблицам, а не к тем, которые у нас уже есть;
2. вариант с написанием SQL запроса с изменением charset по типу ALTER DATABASE…, но, барабанная дробь, это тоже не работает в нашем случае).

3) Нам необходимо сохранить данные таблиц и изменить сравнение. Самый быстрый и наименее затратный способ выполнить это описан ниже. Первым делом нам нужно экспортировать данные всей базы данных. В phpMyAdmin это делается с помощью вкладки «Экспорт». Параметры выгрузки нам не важны, так что просто кликаем ОК.

4) Открываем скачанный файл .sql через notepad++ или любой редактор в котором есть команда «Заменить» и выполняем следующие замены:

) ENGINE=MyISAM DEFAULT CHARSET=latin1 на ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

и вторая, потому что при выгрузке бывает вставляет между словами MyISAM и DEFAULT не один пробел, а 2.

) ENGINE=MyISAM DEFAULT CHARSET=latin1 на ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

В данном случае, я использовал Sublime Text 3. На скрине изображена операция второй замены:


И, конечно же, после всех замен сохраняем файл .sql

5) Теперь самое время нам вернуться в phpMyAdmin и удалить все таблицы в нашей базе от MODx.

6) Удалили? Отлично! Теперь переходим во вкладку «Импорт», выбираем наш отредактированный файл .sql и импортируем.

7) Теперь проверим результат нашей работы: переходим на вкладку «Структура» и смотрим в столбец «Сравнение». Должно быть следующее:


Если во всех строках этого столбца вы видите это значение, то переходите к пункту 8, если нет, то значит Вы заменили не все строки в пункте 4, возвращайтесь к пункту 4.

8) Let’s party cos It’s party time!


  • ModX

Комментарии

Добавить комментарий

Вы вернулись, чтобы дочитать статью? Кликните на меня, я найду то место, где вы остановились.