Перенёс сайт на новый хостинг и получил проблему в кодировке MySQL.
Полез копаться в базу через phpMyAdmin. Везде кодировки стоят правильные. Думал, может создал базы как–то не так?
И вот, перекапывая phpMyAdmin в поисках проблемы, обнаружил в самом низу перечня таблиц интересную
строчку. Там было количество таблиц, количество записей, сколько оно всё места занимает и всё такое. Среди
прочего там было написано «latin1_swedish_ci». Что означает кодировку по–умолчанию, не UTF-8 («utf8_general_ci»),
как положено, а iso-8859-1 («latin1_swedish_ci»), что приводит к полному отсутствию кириллицы и замене её на
знаки вопроса.
Лечится проблема
элементарно:
ALTER DATABASE `ваша_база` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
Либо через phpMyAdmin:
«Операции» > «Сравнения»
, из выпадающего списка выбрать нужное — utf8_general_ci.
Всё. Теперь вновь созданные записи будут в правильной кодировке.