Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка кириллических символов через strlen()
Форумы портала PHP.SU » PHP » Программирование на PHP » Проверка кириллических символов через strlen()

Страниц (1): [1]
 

1. Роман - 14 Августа, 2008 - 22:02:08 - перейти к сообщению
Есть такой скрипт
PHP:
скопировать код в буфер обмена
  1. if(strlen($login)<2 || strlen($login)>20) {
  2.                 $wrong = '<li>Логин выходит за диапазон 2-20 символов</li>';}
Как вы видите он проверяет колличесво символов в переменной $login
Вроде бы всё отлично, но при проверке русских логинов возникают проблемы.
1 символ считается за 2. Вот примеры значений $login:
u //верно (выдаётся ошибка)
1 //верно (выдаётся ошибка)
г //не верно (ошибка не выдаётся)
Помогите, пожалуйста, решить проблему. Как заставить 1 кириллический символ считать за 1, а не за 2?
Заранее спасибо!
2. UA.ProG - 15 Августа, 2008 - 00:23:10 - перейти к сообщению
тю да норм оно считает один символ ето один байт. вроде оно всё норм считает
3. Роман - 15 Августа, 2008 - 00:33:05 - перейти к сообщению
UA.ProG, если бы оно считало нормально, то я бы не спрашивал
Так же если поставить strlen($login)<10, то ошибка не выведется уже при 5-ти кириллических символах. От кодировки как-нить зависит это?
4. UA.ProG - 15 Августа, 2008 - 02:11:07 - перейти к сообщению
Хм возможно ставь utf_8
5. Вездеход - 15 Августа, 2008 - 07:36:16 - перейти к сообщению
по теме ниче конкретно сказать не могу. не встречал такой гадости... у меня все корректно эта функция обрабатывает вроде. может как то так попробовать? http://php.su/functions/?mb-strlen

UA.ProG пишет:
тю да норм оно считает один символ ето один байт. вроде оно всё норм считает

функция считает количество символов а не байт.
6. Роман - 15 Августа, 2008 - 09:06:54 - перейти к сообщению
UA.ProG, у меня и есть UTF-8
(Добавление)
Вездеход пишет:
http://php.su/functions/?mb-strlen

Выдаёт
Цитата:
Call to undefined function mb_strlen()

Возможно из-за того что (PHP 4 >= 4.0.6) Версия php от 4 до 4.0.6 у меня пятёрка...
(Добавление)
Выяснил в чём проблема. в UTF-8 1 кириллический символ = 2байтам..
Даже не знаю что теперь делать.. Возвращаться на ANSI или искать решение для UTF-8
(Добавление)
Вездеход, спасибо. На другом хостинге, где есть расширение mbstring, всё заработало))
Вот таким вт образом (если вдруг кому понадобится)
PHP:
скопировать код в буфер обмена
  1. if(mb_strlen($login,'utf-8')<2 || mb_strlen($login,'utf-8')>20) {}
7. UA.ProG - 15 Августа, 2008 - 10:23:03 - перейти к сообщению
Вездеход пишет:
функция считает количество символов а не байт.
слушай никогда не задумывался как оно считает кол-во символов? один символ занимает байт(или два) памяти. как оно поймет сколько мы символов написали, по другому!выдвигай свою версию.Будешь вносить новые возможности в ПХПУлыбка
8. Вездеход - 15 Августа, 2008 - 13:39:04 - перейти к сообщению
нет я как то не задумывался. у меня есть на что время более полезно потратить...

зы.
UA.ProG пишет:
один символ занимает байт (или два) памяти.

вот именно что или. зависит от кодировки. кодировка в функции никак не указывается. а в скрипте не всегда она указывается!

Роман
та незачто. =)

 

Powered by ExBB FM 1.0 RC1