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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проверка кириллических символов через strlen()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Роман
Отправлено: 14 Августа, 2008 - 22:02:08
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




Есть такой скрипт
PHP:
скопировать код в буфер обмена
  1. if(strlen($login)<2 || strlen($login)>20) {
  2.                 $wrong = '<li>Логин выходит за диапазон 2-20 символов</li>';}
Как вы видите он проверяет колличесво символов в переменной $login
Вроде бы всё отлично, но при проверке русских логинов возникают проблемы.
1 символ считается за 2. Вот примеры значений $login:
u //верно (выдаётся ошибка)
1 //верно (выдаётся ошибка)
г //не верно (ошибка не выдаётся)
Помогите, пожалуйста, решить проблему. Как заставить 1 кириллический символ считать за 1, а не за 2?
Заранее спасибо!

(Отредактировано автором: 14 Августа, 2008 - 22:02:41)

 
 Top
UA.ProG
Отправлено: 15 Августа, 2008 - 00:23:10
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


тю да норм оно считает один символ ето один байт. вроде оно всё норм считает


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
Роман
Отправлено: 15 Августа, 2008 - 00:33:05
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




UA.ProG, если бы оно считало нормально, то я бы не спрашивал
Так же если поставить strlen($login)<10, то ошибка не выведется уже при 5-ти кириллических символах. От кодировки как-нить зависит это?
 
 Top
UA.ProG
Отправлено: 15 Августа, 2008 - 02:11:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


Хм возможно ставь utf_8


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
Вездеход
Отправлено: 15 Августа, 2008 - 07:36:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




по теме ниче конкретно сказать не могу. не встречал такой гадости... у меня все корректно эта функция обрабатывает вроде. может как то так попробовать? http://php.su/functions/?mb-strlen

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

функция считает количество символов а не байт.


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Роман
Отправлено: 15 Августа, 2008 - 09:06:54
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




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) {}
 
 Top
UA.ProG
Отправлено: 15 Августа, 2008 - 10:23:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


Вездеход пишет:
функция считает количество символов а не байт.
слушай никогда не задумывался как оно считает кол-во символов? один символ занимает байт(или два) памяти. как оно поймет сколько мы символов написали, по другому!выдвигай свою версию.Будешь вносить новые возможности в ПХПУлыбка


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
Вездеход
Отправлено: 15 Августа, 2008 - 13:39:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




нет я как то не задумывался. у меня есть на что время более полезно потратить...

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

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

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


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB