Симтомы: когда мы пытаемся найти участника форума, ник которого состоит из русских букв из Админ-центра, то при поиске через основной поиск (Admin CP -> Users and Groups -> Find/Edit/Suspend User), участник находится без сложностей.
Однако, если мы будем искать того же участника с главной страницы Админ-центра
то поиск не принесёт результатов.
Причины: поиск с главной страницы Админ-центра сделан через ява-скрипт, в котором при нажатии на кнопку "Find member" ник участника посылается в форму для поиска через функцию ява-скрипта escape.
В последних версиях современных браузеров данная функция кодирует не в hex кодирование %hex, а в двойное юникодовое кодирование (%uxxx), которое не воспринимается на стороне сервера за валидную информацию. Применённая для этого на стороне сервера функция urldecode() совершенно безполезна в данном случае.
Соответственно ник, введённый по-русски, в итоге запрашивается СУБД совсем в другом искажённом виде и естественно ничего не находится.
Исправление:
1.x:
Самым простым решением в данном случае будет убрать использование escape.
Удалите выделенные участки кода:
Цитата (ad_index.php)
[b]function[/b] edit_member() { [b]if[/b] (document.forms[0].username.value == \"\") { alert(\"You must enter a username!\"); } [b]else[/b] { window.parent.body.location = '{$SKIN->base_url}' + '&act=mem&code=stepone&USER_NAME=' + escape(document.forms[0].username.value); } }
В версии 2.1 исправление живёт в файле skin_acp/IPB2_Standard/acp_skin_html/cp_skin_index.php
Song_Bot: К посту прикреплены вложения, но посмотреть Вы их можете, только открыв статью в Форуме.
Song:
Симтомы: когда мы пытаемся найти участника форума, ник которого состоит из русских букв из Админ-центра, то при поиске через основной поиск (Admin CP -> Users and Groups -> Find/Edit/Suspend User), участник находится без сложностей.
Однако, если мы будем искать того же участника с главной страницы Админ-центра
то поиск не принесёт результатов.
Причины: поиск с главной страницы Админ-центра сделан через ява-скрипт, в котором при нажатии на кнопку "Find member" ник участника посылается в форму для поиска через функцию ява-скрипта escape.
В последних версиях современных браузеров данная функция кодирует не в hex кодирование %hex, а в двойное юникодовое кодирование (%uxxx), которое не воспринимается на стороне сервера за валидную информацию. Применённая для этого на стороне сервера функция urldecode() совершенно безполезна в данном случае.
Соответственно ник, введённый по-русски, в итоге запрашивается СУБД совсем в другом искажённом виде и естественно ничего не находится.
Исправление:
1.x:
Самым простым решением в данном случае будет убрать использование escape.
Удалите выделенные участки кода:
[b]function[/b] edit_member() { [b]if[/b] (document.forms[0].username.value == \"\") { alert(\"You must enter a username!\"); } [b]else[/b] { window.parent.body.location = '{$SKIN->base_url}' + '&act=mem&code=stepone&USER_NAME=' + escape(document.forms[0].username.value); } }В версии 2.1 исправление живёт в файле skin_acp/IPB2_Standard/acp_skin_html/cp_skin_index.php
Song_Bot: К посту прикреплены вложения, но посмотреть Вы их можете, только открыв статью в Форуме.