Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Ввод русского логина

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
Гость

цитировать






СообщениеДобавлено: 08 Дек 2008 17:15:41    Заголовок сообщения: Ввод русского логина Ответить с цитатой Изменить/удалить это сообщение

Здравствуйте. Мне нужно было сделать регистрацию/авторизацию, делал по примеру, всё вроде нормально, но есть одна странность. У меня стоит проверка на число символов вводимого имени, от 4 до 40. Если ввожу английскими буквами, то всё работает нормально, но если ввожу русскими, то проверка не срабатывает, то есть можно ввести имя с 3, 2, 1 символами и регистрация проходит успешно. Кто-нибудь знает, почему так происходит?
Вернуться к началу
zeresesker

цитировать



Зарегистрирован: 07 Ноя 2008 19:35:32
Сообщения: 8

СообщениеДобавлено: 08 Дек 2008 17:27:26    Заголовок сообщения: Ответить с цитатой

О какой авторизации и примерах идет речь?
Что с кодировками?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kondrat
Гость
цитировать






СообщениеДобавлено: 08 Дек 2008 21:20:14    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение

Нельзя использовать strlen. Надо проверять mb_strlen ( string $str [, string $encoding ] ). Я так думаю
Вернуться к началу
Гость

цитировать






СообщениеДобавлено: 09 Дек 2008 08:26:39    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение

Пример брал с http://www.ibm.com/developerworks/ru/edu/os-php-cake1/section3.html
Кодировка Utf8 и в phpMyAdmin тоже.
Проверка такая
var $validate = array('username' => '/^.{4,40}$/',
'password' => '/^.{6,40}$/',
'email' => VALID_EMAIL,
'first_name' => '/^.{1,40}$/',
'last_name' => '/^.{1,40}$/');
Вернуться к началу
VolCh

цитировать



Зарегистрирован: 21 Окт 2007 07:17:33
Сообщения: 47
Откуда: Санкт-Петербург

СообщениеДобавлено: 13 Дек 2008 13:29:17    Заголовок сообщения: Ответить с цитатой

Ошибка в том, что PCRE работает по умолчанию с однобайтовыми кодировками, надо или использовать в рекекспах модификатор u (например '/^.{4,40}$/u') или использовать встроенные в Кэйк правила minLenght и maxlenght.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vaho

цитировать



Зарегистрирован: 03 Дек 2008 10:36:09
Сообщения: 10

СообщениеДобавлено: 13 Дек 2008 17:33:36    Заголовок сообщения: Ответить с цитатой

Спасибо за помощь (это я спрашивал Гостем)
Всё что я делал, делал в 1.1 когда перешёл на 1.2 проблема сама собой отпала
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Chikiro

цитировать



Зарегистрирован: 11 Дек 2008 09:00:06
Сообщения: 1

СообщениеДобавлено: 17 Дек 2008 23:15:29    Заголовок сообщения: Ответить с цитатой

при использовании minLenght и maxlenght проблема с неправильным подсчетом количества символов остается.
подключение в bootstrap multibyte.php тоже не помогает, у меня 1.2 RC3
и тикет открытый висит: https://trac.cakephp.org/ticket/2218


кто как решает эту проблему?
использовать костыль rule => custom вместо length?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kondrat
Гость
цитировать






СообщениеДобавлено: 18 Дек 2008 11:57:44    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение Удалить сообщение

Я уже написал:
Использую custom
Код:

   var $validate = array(
                     'username' => array(
                                                      
                                    'betweenRus' => array(
                                                   'rule' => array( 'betweenRus', 2, 15, 'username'),
                                                   'message' => 'От 2 до 15 букв'
                                                   ),                                     

и функцию:
Код:

   function betweenRus($data, $min, $max, $key) {
      //debug($data);
      $length = mb_strlen($data[$key], 'utf8');

      if ($length >= $min && $length <= $max) {
         return true;
      } else {
         return false;
      }
   }
Вернуться к началу
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru