Переход на другую кодировку символов в форуме.

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
denisimus
phpBB 1.0.0
Сообщения: 2
Стаж: 19 лет

Переход на другую кодировку символов в форуме.

Сообщение denisimus »

Есть форум phpbb 2.0.8 весь контент с кодировкой windows-1251.
Делаю интеграцию с Gallery2. Там контент в UTF-8. Нужно сделать все в одной кодировке. Поддержка Gallery2 говорит решайте проблему через phpbb.

Я предполагаю нужны следующие шаги для перехода:
1)Смена кодировки файлов превода в теме.
2)Там же замена конфигурационной переменной. которая содержит имя кодировки.
3)Смена кодировки контента в БД.
4)Все данные приходящие от пользователя из форм нужно перекодировать в UTF-8.

Последний пункт вызывает наибольшее беспокойство, это может оказаться как много работы, так и наоборот, все зависит от того как реализован прием переменных в phpbb.
Как можно cделать с наименьшими усилиями подобную конвертацию? Проходят ли переменные через одну функцию или нужно будет
менять код в каждом сценарии, который принимает данные? Если через одну, то как она называется?

Возможно кто сталкиался с подобной задачей подскажите как
поступить? Возможно есть другой путь отличный от описанных мной шагов, как с наименьшими усилиями перейти на UTF-8?
Аватара пользователя
YogSagot
phpBB 1.4.3
Сообщения: 98
Стаж: 19 лет
Откуда: Латвия, г.Даугавпилс

Сообщение YogSagot »

4)Все данные приходящие от пользователя из форм нужно перекодировать в UTF-8.
Вот как раз таки это и не обязательно! :wink: Это забота браузера, в какой кодировке отправляються данные форм. Если браузер отображает контент в UTF-8, то и формы он обрабатывает в оной-же.

Вообще, в коде самой phpbb я с данным вопросом не копался. Мой ответ основываеться на опыте создания вот этого вот скрипта. Там весь контент в базе хранится в UTF-8 и все что мне потребовалось, чтобы обеспечить прием данных от форм в этой кодировке, так это указать в метатэгах страницы: content="text/html; charset=UTF-8. Никаких дополнительных телодвижений не потребовалось. :)

Добавлено спустя 4 минуты 53 секунды:
Проходят ли переменные через одну функцию или нужно будет
менять код в каждом сценарии, который принимает данные?
Все сценарии инклудят код common.php. Весь код, отвечающий за прием и обработку переменных, находится именно там.
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 20 лет
Откуда: Архангельск

Сообщение Гога »

Про перекодировку БД см. http://www.phpbbguru.net/community/viewtopic.php?t=4603
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
denisimus
phpBB 1.0.0
Сообщения: 2
Стаж: 19 лет

Сообщение denisimus »

Я все сделеал
Если кому придется менять кодировку, то нужно:
1)Перекодировать файлы перевода

2)Перекодировать файлы с текстом писем

3)Перекодировать БД, можно сделать дамп, перекодировать и снова залить получившийся дамп в БД.

4)Нужно учитывать что данные в UTF-8 занимают в два раза больше места, поэтому у некоторых полей в таблицах нужно изменить максимальную длину. Это касается полей varchar, котрые хранят имена, которые могут быть русскими символами.

5)В некоторых скриптах (login.php и usercp_register.php) нужно изменить максимальное количество символов, иначе строки могут урезаться, все из-за того, что в UTF-8 строки занимают больше места.
У меня в login.php это строка 58
было
$username = substr(str_replace("\\'", "'", $username), 0, 25);
стало
$username = substr(str_replace("\\'", "'", $username), 0, 50);

аналогично в usercp_register.php это строки 509, 631, 653

6)И на конец если БД была не пуста и пользователи в паролях использовали русские символы и не хочется заставлять их менять свои пароли, то нужно добавить корректную проверку паролей в этом случае. Нужно учитывать, что хеш пароля был сохранен из символов в кодировке windows-1251.
Что бы это учесть можно добавить в условия проверки на совпадение пароля вот такую строчку
было
if( md5($password) == $row['user_password'] && $row['user_active'] )
стало
if( (md5($password) == $row['user_password'] ||
md5(iconv('utf-8', 'windows-1251', $password)) == $row['user_password']) && $row['user_active'] )

Эти изменения затронули файлы login.php и usercp_register.php


PS. Когда кодироровка страницы UTF-8 все данные из форм на сервер приходят в этой кодировке, т.е. браузер их посылает как надо.

Вернуться в «Поддержка phpBB 2.0.x»