Перейти к контенту
  • 0

Регистрация ников на чистой кириллице


Вопрос

Проблема выглядит так: если при попытке регистрации ник или отображаемое имя написано на чистой кириллице, выводится сообщение:

 

Введенное имя пользователя уже используется другим пользователем

 

Проверял и на Firefox 3, и на MS IE 6. Куки и прочее чистил. Кодировка страниц в браузерах во всех случаях Windows-1251.

 

Версия IPB - 2.3.5 русская (последняя, только что скачал). Локаль установлена корректно:

 

setlocale(LC_ALL, 'ru_RU.CP1251');

 

Ограничения при вводе ника и отображаемого имени («Настройки отображаемого имени») - по умолчанию. Но тут ничего и не зависит - пытался ограничить употребление букв только кириллицей, разницы никакой.

 

А теперь самое интересное. Достаточно добавить в ник или имя один некириллический символ в любое место и все нормально!! То есть: "Петя Иванов" не проходит, а "Петя Иванов 1", "Petya Иванов", "Петя (Иванов)" или "Петя - Иванов" - проходит!!! Как такое может быть?

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Кривой null, возможно.. Бред какой-то. Как будто некорректно отредактировали это место в register.php.

 

Это была реклама лицензии. (с)

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0
Кривой null, возможно.. Бред какой-то. Как будто некорректно отредактировали это место в register.php.

 

Это была реклама лицензии. (с)

А если не секрет, что именно должно быть в register.php?

 

Версия как раз лицензионная, брал отсюда неделю назад:

https://www.ibresource.ru/clientarea/dl.php...amp;version=236

 

Тема крайне актуальна, потому что как раз собираюсь пользователей регистрировать исключительно на кириллице и реальными именами...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Вторые сутки мучаюсь с этой проблемой. ПОЛНОСТЬЮ собрал форум в другом каталоге с нуля.

 

Данные:

Версия - официальная лицензионная русская 2.3.5, сразу после установки проапгрейдил до 2.3.6 (это, кстати, ни на что не влияло - в 2.3.5 все проблемы были те же).

Установки PHP - здесь: http://forumtest2.tango.ru/phpinfo.php

Сам форум - http://forumtest2.tango.ru/, можете попробовать.

Браузеры - Firefox 3, MS IE 6.

Куки чистил, сессионные файлы PHP тоже стирал - без разницы.

 

Установки через админку Настройки - Настройки отображаемого имени:

Разрешить отображаемое имя - да

Запретить «Отображаемые имена», совпадающие с существующими «Именами пользователей» - без разницы, что да, что нет

Символы, допустимые в именах пользователей - без разницы! Даже "в лоб" перечислял буковки кириллицы, все то же самое.

Запретить переводы строк в именах? - без разницы

 

Включение/выключение JavaScript - без разницы. Если JavaScript показывает, что такое имя уже существует, то и при выключенном джаваскрипте после щелчка по кнопке "Зарегистрироваться" появится такая же ошибка.

 

Вывод: где-то проблема в register.php. Честно копал, но 2700 строк кода - очень много. Помогите, пожалуйста!

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Помню у меня была проблема с регистрацией имен и ников на кириллице. Но у меня они были, как потом оказалось, просто запрещены к регистрации. Исправил всего лишь тем, что оставил поле "Символы, допустимые в именах пользователей" пустым. Не пробовали? Хотя, видимо, у вас несколько иная проблема...
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Включил через админку отладку, отключил JavaScript в браузере и вот что увидел.

 

Ввожу на форме регистрации -

Имя пользователя (login): абвгдеж. (с точкой в конце)

желаемое отображаемое имя : АБВГДЕЖ (чистая кириллица)

 

Что передает форма:

UserName = абвгдеж.

members_display_name = АБВГДЕЖ

 

Какие запросы выполняет база:

SELECT id, name, members_display_name, members_created_remote, email, mgroup, member_login_key, ip_address, login_anonymous FROM ibf_members WHERE members_l_username='.'

--------------------------------------------------------------------------------

SELECT members_display_name, id FROM ibf_members WHERE members_l_display_name='.' LIMIT 0,1

--------------------------------------------------------------------------------

SELECT id, members_display_name, name, email, mgroup, member_login_key, ip_address, login_anonymous FROM ibf_members WHERE members_l_display_name=''

--------------------------------------------------------------------------------

SELECT members_display_name, id FROM ibf_members WHERE members_l_username='' LIMIT 0,1

 

То есть: ВСЯ кириллица из запроса удаляется на стороне сервера. Если в запросе была только кириллица, то сравнение идет с пустой строкой. База данных - MySQL 5.0.45, сравнение - cp1251_general_ci. По-прежнему ничего не зависит от установки "Символы, допустимые в именах пользователей".

 

Как такое может быть?

 

===============================================

===============================================

 

Теперь провожу конкретный эксперимент. Регистрирую себя с логином 'Алексей1' и отображаемым именем 'Алексей 1966'. База выдает следующие запросы:

 

SELECT id, name, members_display_name, members_created_remote, email, mgroup, member_login_key, ip_address, login_anonymous FROM ibf_members WHERE members_l_username='1'

--------------------------------------------------------------------------------

SELECT members_display_name, id FROM ibf_members WHERE members_l_display_name='1' LIMIT 0,1

--------------------------------------------------------------------------------

SELECT id, members_display_name, name, email, mgroup, member_login_key, ip_address, login_anonymous FROM ibf_members WHERE members_l_display_name=' 1966'

--------------------------------------------------------------------------------

SELECT members_display_name, id FROM ibf_members WHERE members_l_username=' 1966' LIMIT 0,1

--------------------------------------------------------------------------------

INSERT INTO ibf_members (name,members_l_username,members_display_name,members_l_display_name,member_logi

n_key,member_login_key_expire,email,mgroup,posts,joined,ip_address,time_offset,v

iew_sigs,email_pm,view_img,view_avs,restrict_post,view_pop,msg_total,new_msg,cop

p

a_user,language,members_auto_dst,members_editor_choice,allow_admin_mails,hide_em

ail,subs_pkg_chosen,id) VALUES('Алексей1','1','Алексей 1966',' 1966','ec3d18f71214f73eb069636f94eb9f8d',1239269828,'ТУТ МОЙ MAIL',1,0,1236677828,'89.178.196.81',3,1,1,1,1,0,1,0,0,0,'ru',1,'std',1,1,0,3)

 

То есть: в запросах SELECT на совпадение логина и отображаемого имени пользователя с уже зарегистрированными именами вся кириллица удаляется!! Однако в запросе INSERT в полях name и members_display_name кириллица сохранена (проверил затем по таблице ibf_members). Очень похоже, что это старый баг, который запросто мог остаться незамеченным разработчиками. Помогите, пожалуйста, где это исправить. У меня пользователи должны отображаемое имя по идее на кириллице вводить.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

===========

Нашел-таки!! Глючила функция strtolower() - глотала кириллицу, несмотря на правильную установку локали через PHP. Сервер у меня арендован забугорный, по умолчанию локали не сгенерированы. Я сделал в свое время ru_RU.UTF8 и на том успокоился, т.к. остальные проекты на этой машине у меня как раз в UTF-8.

 

Поглядел locale -a|grep ru, и понял, что искал там, где не зарывал. :D А вылечилось все вот этим:

 

localedef -i ru_RU -f CP1251 ru_RU.CP1251

 

Рестартовал Апачу, регистрация заработала как положено. В общем, всем спасибо! Надеюсь, мои грабли кому-нибудь однажды сэкономят время. ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Вы конечно можете сказать "где вы были раньше", но ведь можно было проверить, что вернёт функция http://ru2.php.net/setlocale? :D Особенно если так безапелляционно пишите в начале темы.
Ссылка на комментарий
Поделиться на других сайтах

  • 0
респект за способность трассировки и нахождение проблемы

мало кто сейчас может сделать это самостоятельно

Эх, коллега, спасибо на добром слове! Как легко догадаться из моего ника, я из того... советского поколения...

 

А теперь дальнейшие результаты изысканий. :)

 

Во-первых, я снова написал лажу (с недосыпу все перепутал). Правильно локаль генерируется так:

 

cd /usr/lib/locale/

localedef --force -i ru_RU -f CP1251 ./ru_RU.CP1251

 

В нынешних дистрибутивах Линукса описание локали ru_RU неполное, localedef выдает кучу предупреждений (они видны только по ключу -v) и ничегошеньки не делает. Так что я снова искал там, где не зарывал. :)

 

Во-вторых, даже с правильно сгенерированной локалью я получил грабли. Написал простенький файлик:

 

error_reporting(E_ALL);
setlocale(LC_ALL, 'ru_RU.CP1251');
echo "<pre>############<br>\n";
$s="Петя Иванов 1";
echo $s;
echo "############<br>\n";
echo strtolower($s);
echo "##################<br>\n";
  $locale_info = localeconv();
print_r($locale_info);
echo "##################</pre>";

 

Сижу, дергаю его - и крыша у меня отъезжает. Потому что через три раза на пятый вдруг strtolower начисто съедает кириллицу в имени Пети Иванова. При этом вывод localeconv не меняется!! И никакой закономерности! То на пятый раз, то на десятый!!! Шайтанство. :D

 

И вот тут попалось мне предупреждение в мануале PHP:

 

Warning

The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server api like IIS or Apache on Windows you may experience sudden changes of locale settings while a script is running although the script itself never called setlocale() itself. This happens due to other scripts running in different threads of the same process at the same time changing the processwide locale using setlocale().

 

Елки-палки, а у меня та же Апача крутит сайт, на котором изменены параметры для mbstring:

 

php_value mbstring.func_overload 2

php_value mbstring.internal_encoding UTF-8

 

Отключаю сайт - и наконец шайтанство заканчивается!! То есть Apache/2.2.3 - многопоточная, переменные из одного потока запросто перескакивают в другой. ;) А установки для mbstring, которые мне были нужны для Интернет-магазина, мне уже немало попортили крови в других приложениях, включая phpMyAdmin. Кстати, неважно, где устанавливаются переменные - в конфиге Апачи или в .htaccess, результат все тот же.

 

Сухой остаток: если на той же Апаче 2 крутится сайт со специфическими установками для mbstring, можно наблюдать "шаманство" с кириллицей, когда strtolower будет просто проглатывать кириллические буквы.

 

Кажется, это наблюдали и другие пользователи. Я не спец по 2-й Апаче, есть какие-то другие возможности решить проблему, кроме как запустить другой экземпляр Апачи на другом IP?

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.