Перейти к содержимому


Фотография
- - - - -

Проблемы с русскими никами

русский язык ники кодировкиб utf8

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 23 Июль 2012 - 16:38

Добрый день!

Вот уже второй день бьюсь с кодировками. Пытаюсь ставить анголязычную версию IPB (3.3.4). Возникают следующие проблемы:

Если ставить в лоб, не задумываясь, то с виду все выглядит нормально - темы создаются, пользователи с русскими никами регистрируются. Однако при взгляде на форум изнутри (например через phpMyAdmin), вместо русских букв видим примерно такое:
На Камчатке, в поселке Вулканный, при проведении работ по благоустройству под фундаментом памятника Ленину обнаружена капсула с

Полагаю, что идет какое-то несооветствие кодировок между базой данных и тем, что форумный движок в нее записывает. Думаю, чревато разными проблемами, например при резервном копировании. (К слову сказать, база, как и положено, в utf8).

В конфиге форума charset для базы не прописан.

Если прописать charset принудительно до инсталляции, картина меняется:

Через phpMyAdmin все тексты видны правильно, и на форуме тоже, однако русские ники в списке участников не выводятся вообще (хотя по прямой ссылке попасть в профайл можно), зарегистрировать можно только одного "русского", при последующих попытках регистрации русских ников система пишет, что "этот ник использует кто-то другой".

В чем может быть загвоздка?
  • 0

#2 Оффлайн   ๖ۣۣۜDesperate™

    Администратор


  • Администраторы
  • Репутация
    4 632
    • Cообщений: 8 603
    • Форум:3.4.х
    • Город:IpbZona
    Участник

Отправлено 23 Июль 2012 - 16:57

Добрый день, у вас БД в utf-8 general ci сопоставление и во вкладке операции? Проще выдайте все доступы на фтп и в БД в ЛС сейчас глянем что и как.
  • 0

#3 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 23 Июль 2012 - 18:43

Доступы выложить не могу - там несколько других проектов лежит.

Пока ковырялся, обнаружил такую вещь: в таблице members есть такие поля "members_l_display_name" и "members_l_username" - для русских ников они почему-то не заполняются автоматически, если их заполнить, все становится на свои места. (По-моему, IPB что-то тут с количеством полей перемудрил :beat: )

Сопоставление поправил - стояло utf8_unicode_ci, но это сути не поменяло

UPDATE

Глубокое исследование темы выявило следующее: вышеназванные поля в таблице members - "members_l_display_name" и "members_l_username" играют в деле ключевую роль. При использовании русских ников они оставались пустые. Смысл этих полей, как я понял, указание имени посетителя в нижнем регистре (не пойму только, зачем все это нужно, почему его нельзя на лету вычислять - возможно, сделано с целью оптимизации работы с базой при проверке доступности ника).

Поля оставались пустые из-за того, что используемая в скрипте функция strtolower возвращала хрензнаетчто и записывала в базу пустую строку. Как я понял, такая проблема существует при неправильном указании локали. Локаль в IPB определяется по коду языка. У меня язык стоит английский, оттого и глюки. Однако привязка системы регистрации к локали дурно пахнет - смахивает если не на уязвимость, то на баг.

Проблема решается подменой функции strtolower на mb_strtolower (такая замена, кстати, произведена в локализованной версии от IBR).

И все же, как-то все это криво :stena:

Сообщение отредактировал Alien2001: 23 Июль 2012 - 21:18

  • 0