winnie Опубликовано 15 Сентября 2004 Жалоба Поделиться Опубликовано 15 Сентября 2004 сражу скажу ©перта идея с чата пхп.спб.рупроверял - вроде работаетвот сама модификация в файле register.phpищем /*-------------------------------------------------------------------------*/ // create_account // ------------------ // Now this is a really good subroutine. It adds the memberи ПЕРЕД этим добавляемfunction _pre_preg($nick) { unset($reg); $reg['q']='q'; $reg['w']='w'; $reg['e']='[eеё]'; $reg['r']='[rг]'; $reg['t']='[tт]'; $reg['y']='[yу]'; $reg['u']='[uи]'; $reg['i']='[i1l!]'; $reg['o']='[oо0]'; $reg['p']='[pр]'; $reg['a']='[aа]'; $reg['s']='[s5]'; $reg['d']='d'; $reg['f']='f'; $reg['g']='[gд]'; $reg['h']='[hн]'; $reg['j']='j'; $reg['k']='[kк]'; $reg['l']='[l1i!]'; $reg['z']='z'; $reg['x']='[xх%]'; $reg['c']='[cс]'; $reg['v']='[vuи]'; $reg['b']='[bвь]'; $reg['n']='[nпл]'; $reg['m']='[mм]'; $reg['й']='[йиu]'; $reg['ц']='ц'; $reg['у']='[уy]'; $reg['к']='[кk]'; $reg['е']='[еeё]'; $reg['н']='[нh]'; $reg['г']='[гr]'; $reg['ш']='[шwщ]'; $reg['щ']='[щwш]'; $reg['з']='[з3э]'; $reg['х']='[хx%]'; $reg['ъ']='[ъь]'; $reg['ф']='ф'; $reg['ы']='(ы|ь[i1l!]?)'; $reg['в']='[вb]'; $reg['а']='[аa]'; $reg['п']='[пn]'; $reg['р']='[рp]'; $reg['о']='[оo0]'; $reg['л']='[лn]'; $reg['д']='д'; $reg['ж']='ж'; $reg['э']='[э3з]'; $reg['я']='я'; $reg['ч']='[ч4]'; $reg['с']='[сc]'; $reg['м']='[мm]'; $reg['и']='[иuй]'; $reg['т']='[тt]'; $reg['ь']='[ьb]'; $reg['б']='[б6]'; $reg['ю']='(ю|[!1il][oо0])'; $reg['ё']='[ёеe]'; $reg['1']='[1il!]'; $reg['2']='2'; $reg['3']='[3зэ]'; $reg['4']='[4ч]'; $reg['5']='[5s]'; $reg['6']='[6б]'; $reg['7']='7'; $reg['8']='8'; $reg['9']='9'; $reg['0']='[0оo]'; $reg['_']='_'; $reg['~']='[~^]'; $reg['!']='[!1li]'; $reg['@']='@'; $reg['#']='#'; $reg['$']='[$]'; $reg['%']='[%x]'; $reg['^']='[^~]'; $reg['*']='[*]'; $reg['(']='[(]'; $reg[')']='[)]'; $reg['=']='='; $reg['+']='[+]'; $reg['.']='[.]'; $reg['-']='-'; $n=strtolower($nick); $r=""; for ($i=0; $i<strlen($nick); $i++) { $r.=$reg[$n[$i]]; } return "$r"; } внутри функции находим запросы$DB->cache_add_query( 'login_getmember', array( 'username' => strtolower($in_username) ) ); $DB->cache_exec_query();меняем на $DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($in_username)."'" ) ); $DB->simple_exec(); и чуть ниже $DB->cache_add_query( 'login_getmember', array( 'username' => strtolower($unicode_name) ) ); $DB->cache_exec_query();(этот отличается от предыдущего)меняем на$DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($unicode_name)."'" ) ); $DB->simple_exec(); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Iris Опубликовано 15 Сентября 2004 Жалоба Поделиться Опубликовано 15 Сентября 2004 спасибо за заботу Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Christoph Schneider Опубликовано 16 Сентября 2004 Жалоба Поделиться Опубликовано 16 Сентября 2004 Хорошая штука Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Balancer Опубликовано 16 Сентября 2004 Жалоба Поделиться Опубликовано 16 Сентября 2004 Вот так: "$n[$i]" никогда не пиши. Это вырезка не символа, а байта. На UTF-8 и т.п. в частности и с mb_string вообще работать корректно не будет. Я понимаю ещё Мэтту на это наплевать, но у тебя-то не английский родной "substr($n, $i, 1)" А так - хорошая идея Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
romav Опубликовано 16 Ноября 2005 Жалоба Поделиться Опубликовано 16 Ноября 2005 Люди, а как это применить в версии 2.1.3? Там не совсем такой код как в 2.0.х Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Swindler Опубликовано 25 Мая 2006 Жалоба Поделиться Опубликовано 25 Мая 2006 Люди, а как это применить в версии 2.1.3? Там не совсем такой код как в 2.0.хПрактически аналогично!Идёшь в файлик sources\action_public\register.phpищем /*-------------------------------------------------------------------------*/ // create_account // ------------------ // Now this is a really good subroutine. It adds the memberи ПЕРЕД этим добавляем function _pre_preg($nick) { unset($reg); $reg['q']='q'; $reg['w']='w'; $reg['e']='[eеё]'; $reg['r']='[rг]'; $reg['t']='[tт]'; $reg['y']='[yу]'; $reg['u']='[uи]'; $reg['i']='[i1l!]'; $reg['o']='[oо0]'; $reg['p']='[pр]'; $reg['a']='[aа]'; $reg['s']='[s5]'; $reg['d']='d'; $reg['f']='f'; $reg['g']='[gд]'; $reg['h']='[hн]'; $reg['j']='j'; $reg['k']='[kк]'; $reg['l']='[l1i!]'; $reg['z']='z'; $reg['x']='[xх%]'; $reg['c']='[cс]'; $reg['v']='[vuи]'; $reg['b']='[bвь]'; $reg['n']='[nпл]'; $reg['m']='[mм]'; $reg['й']='[йиu]'; $reg['ц']='ц'; $reg['у']='[уy]'; $reg['к']='[кk]'; $reg['е']='[еeё]'; $reg['н']='[нh]'; $reg['г']='[гr]'; $reg['ш']='[шwщ]'; $reg['щ']='[щwш]'; $reg['з']='[з3э]'; $reg['х']='[хx%]'; $reg['ъ']='[ъь]'; $reg['ф']='ф'; $reg['ы']='(ы|ь[i1l!]?)'; $reg['в']='[вb]'; $reg['а']='[аa]'; $reg['п']='[пn]'; $reg['р']='[рp]'; $reg['о']='[оo0]'; $reg['л']='[лn]'; $reg['д']='д'; $reg['ж']='ж'; $reg['э']='[э3з]'; $reg['я']='я'; $reg['ч']='[ч4]'; $reg['с']='[сc]'; $reg['м']='[мm]'; $reg['и']='[иuй]'; $reg['т']='[тt]'; $reg['ь']='[ьb]'; $reg['б']='[б6]'; $reg['ю']='(ю|[!1il][oо0])'; $reg['ё']='[ёеe]'; $reg['1']='[1il!]'; $reg['2']='2'; $reg['3']='[3зэ]'; $reg['4']='[4ч]'; $reg['5']='[5s]'; $reg['6']='[6б]'; $reg['7']='7'; $reg['8']='8'; $reg['9']='9'; $reg['0']='[0оo]'; $reg['_']='_'; $reg['~']='[~^]'; $reg['!']='[!1li]'; $reg['@']='@'; $reg['#']='#'; $reg['$']='[$]'; $reg['%']='[%x]'; $reg['^']='[^~]'; $reg['*']='[*]'; $reg['(']='[(]'; $reg[')']='[)]'; $reg['=']='='; $reg['+']='[+]'; $reg['.']='[.]'; $reg['-']='-'; $n=strtolower($nick); $r=""; for ($i=0; $i<strlen($nick); $i++) { $r.=$reg[substr($n, $i, 1)]; } return "$r"; }внутри функции находим запросы $this->ipsclass->DB->cache_add_query( 'login_getmember', array( 'username' => strtolower($in_username) ) ); $this->ipsclass->DB->cache_exec_query();меняем на $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($in_username)."'" ) ); $this->ipsclass->DB->simple_exec();и чуть ниже $this->ipsclass->DB->cache_add_query( 'login_getmember', array( 'username' => $this->ipsclass->DB->add_slashes(strtolower($unicode_name) ) )); $this->ipsclass->DB->cache_exec_query();(этот отличается от предыдущегоsmile.gif)меняем на $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($unicode_name)."'" ) ); $this->ipsclass->DB->simple_exec(); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ctaiz Опубликовано 31 Октября 2006 Жалоба Поделиться Опубликовано 31 Октября 2006 У всех нормально работает? У меня если первую букву заменить, то всё регит зы 2.1 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Firerain Опубликовано 31 Октября 2006 Жалоба Поделиться Опубликовано 31 Октября 2006 А нет ли мыслей насчёт 1.3.1? На сколько я понял отталкиваться нужно от $DB->query("SELECT id FROM ibf_members WHERE LOWER(name)='".strtolower($in_username)."'"); $name_check = $DB->fetch_row(); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 31 Октября 2006 Жалоба Поделиться Опубликовано 31 Октября 2006 Ну да, правильно, надо просто конструкция запросов к БД переделать под 1.3 и все. Лично я так думаю... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Firerain Опубликовано 31 Октября 2006 Жалоба Поделиться Опубликовано 31 Октября 2006 На сколько я понимаю в 1.3.1 идёт один запрос а не два как в 2.0 и 2.1? Или я что-то не доглядел. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Wilddancer Опубликовано 6 Ноября 2006 Жалоба Поделиться Опубликовано 6 Ноября 2006 Идея прикольная.По крайней мере не будет больше Barakud и Barakkud, спорящих, у кого ник правильнее Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Jax Опубликовано 9 Ноября 2006 Жалоба Поделиться Опубликовано 9 Ноября 2006 Нет. Регистрация пропустит "Barakud и Barakkud". Он не пропустит, если вместо "a" (англ.), будет стоять "а" (русс.). А верхний вариант - пропустит, так в первом нике одна К, а в другом их две Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 5 Апреля 2007 Жалоба Поделиться Опубликовано 5 Апреля 2007 Регексп долго же будет выполняться в немаленькой таблице пользователей, по другому тут надо бы подойти ... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.