Так-с, очень много проблем, связанные с кодировкой форума. В итоге у некоторых появляются “
кракозябры” (непонятные спецсимволы и т.п.), а у некоторых вообще отсутствует язык на форуме.
Как с этим бороться?
Существует последовательность определения своих действий:
1. Используя
PHPMyAdmin “залезть” в
БД форума, и определить в какой кодировке находятся таблицы;
2. Определить кодировку Мускула (
MySQL);
3. Предпринять действия к предотвращению проблемы.
Допустим,
БД у нас в кодировке
utf-8, а соединений мускула и его кодировка в
ср1251.
Будем использовать стандартную функцию файла
config.php. Открываем данный файл и находим следующую строчку:
Code:
// $config['Mysqli']['charset'] = 'utf8';
По умолчанию она закомментирована. Нам же следует ее раскомментировать (убрать
//) и указать требуемую нам кодировку. Т.е., выйти должно следующее:
Code:
$config['Mysqli']['charset'] = 'utf8';
Данный прием работает лишь в том случае (да, бывают и чудеса), если Вы используете
MySQLi, а не
MySQL и по большей части при условие чистой установки (
!). Конфигурация так же находится в файле
config.php:
Code:
$config['Database']['dbtype'] = 'mysql';
Вот и все.
Что делать, если это мне не помогло?
Самое главное мы сделали — отрегулировали всеобщую кодировку БД и vB. Но, если у Вас все же проблема отображения некорректных символов осталась, то следует "копать" уже в другую сторону.
Последовательность действий:
1. Убедиться, что предыдущие действия по отрегулировке кодировки имеют правильный характер. Одним словом, дать себе и машине понять, что на серверной части все так, как и должно быть;
2. Проанализировать показатели браузера по выбору кодировки.
Да, как оказалось, браузер может и не "почувствовать" изменения, которые Вы проводили. В таком случае, весь процесс отладки завершен лишь наполовину.
Как пример: Имеется форум с параметрами кодировки — БД: Кодировка базы (utf-8), кодировка таблиц (utf-8), сопоставление MySQL (utf-8), языковая кодировка (utf-8).
В браузере каким-то боком все выводится "
кракозябрами". Смотрим кодировку, которую выбрал браузер и делаем ужасающее открытие — он отображает Вам страницу в кодировке ср1251.
Что же делать?
А следующие:
1. Если в корне форума нет
.htaccess, то создать его;
2. В этом самом файле
.htaccess прописать:
Code:
AddDefaultCharset [нужная для Вас кодировка]
В нашем случае, будет выглядеть так:
Code:
AddDefaultCharset utf-8
Более подробная информация по
.htaccess:
Указание явной кодировки
Данный метод решения — брутален. Но, полезен для тех, кто не может прочесть даже символы в админ-панели. Для тех, кому удалось перескочить на английский язык, предлагаю глобальное решение проблемы:
Админ-панель — Языки и фразы — Управление языками — Редактировать настройки — Набор символов HTML — [выставить нужную кодировку]
Есть еще варианты?
Да, есть еще один вариант. Но, он кардинально меняет кодировку соединения. Если обычное решение не помогает, значит у вас большие проблемы с кодировками, которые надо решать, иначе есть вероятность в будущем получить бекапы, которые невозможно восстановить.
Тем не менее, для тех, кто хочет, чтобы работало прямо сейчас, ещё один вариант решения:
Берем файл
init.php с папки
includes, находим там строчку (сразу после подключения):
PHP Code:
{
vbulletin_demo_init_db();
}
И после этой строчки используем сия код:
PHP Code:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
Все проблемы должны решиться.
Другая ситуация -
БД в
ср1251, Мускул в
utf-8. Берем все тот же
init.php, находим ту самую строчку:
PHP Code:
{
vbulletin_demo_init_db();
}
И используем этот код:
PHP Code:
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
Вот и все.
-------------------------------------------------
Внимание: Ниже - для версии 3.8! |
-------------------------------------------------
Найти:
PHP Code:
// make $db a member of $vbulletin
Перед ней добавить:
PHP Code:
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
Или
PHP Code:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
-------------------------------------------------
Внимание: Ниже - для версии 4.x! |
-------------------------------------------------
Найти:
PHP Code:
// make $db a member of $vbulletin
$vbulletin->db =& $db;
Перед ней добавить:
PHP Code:
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
Или
PHP Code:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
Тут все.
P.S. Не забудьте наново перезагрузить языковый пакет (
!)
Примечание: Спасибо
zCarot'у за актуальные правки. =)
Внимание: Если Вам данная статья не помогла, то воспользуйтесь
статьей OldEr'а.