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]   

> Без описания
dimka3210
Отправлено: 02 Апреля, 2011 - 15:42:54
Post Id


Новичок


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


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




Хочу посчитать длину поста. Пост хранится в переменной $post_message. Пропускаю через трим и стрлен, значение кладу в переменую $strlen_post_message
PHP:
скопировать код в буфер обмена
  1. $strlen_post_message = trim(strlen($post_message));

Дальше сравниваю с int
PHP:
скопировать код в буфер обмена
  1.  
  2. $bb_cfg['f_post'] = 18;
  3. if((int)$strlen_post_message <= (int)$bb_cfg['f_post'])
  4.  

Есть одна проблема, русские символы считает за 2.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 12 значение 2
  3. 1234 значение 4
  4. сп значение 4
  5. 12сп значение 6
  6. ааа значение 6
  7. спасибо! значение 15
  8. asd значение 3
  9. dfffff значение 6
  10.  
  11.  


В чём проблема? Почему русские символы считает за 2, а цифры, запятые и т.п. за 1?

П.С. до этого не обращал внимания. Огорчение
Если надо: PHP Version 5.3.3
 
 Top
grefon
Отправлено: 02 Апреля, 2011 - 15:48:55
Post Id



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


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


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




Потому что киррилические буквы в отличии от латиницы весят в 2 раза больше. А strlen считает не кол-во букв а кол-во байтов.
Не помню, но может у mb_strlen() такого нет.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
valenok Модератор
Отправлено: 02 Апреля, 2011 - 15:57:00
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




как альтернатива при отключенной mb_*
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!preg_match("#^.{1,".$maxlength."}$#",$str)) too long;
  3.  


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 02 Апреля, 2011 - 19:54:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




dimka3210 пишет:
В чём проблема? Почему русские символы считает за 2, а цифры, запятые и т.п. за 1?
В качестве возможной причины осуществления некорректного функционирования предполагаемого PHP-приложения, допустимо рассмотрение аспекта проведения действенных составляющих элементов на основании специфицированных информационных полей во вторичном внутреннем базовом элементном уровне трактования, относительно которого не обеспечивается выполнение предшествующий действий для поддержания организации совмещения унимодальных информационных составляющих объектов, относительно критериев ассоцированной кодовой таблицы и разграничивыющих и управляющих элементов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
dimka3210
Отправлено: 03 Апреля, 2011 - 00:19:24
Post Id


Новичок


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


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




Всё решил. Спасибо всем кто помог. Проблема была в UTF8. Сделал через iconv.
 
 Top
Okula
Отправлено: 03 Апреля, 2011 - 00:39:06
Post Id



Участник


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


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




dimka3210 пишет:
Всё решил. Спасибо всем кто помог. Проблема была в UTF8. Сделал через iconv.

зачем конвертировать кодировку если функция mb_strlen() отлично справляется с поставленной задачей. Нужно было прислушаться ещё ко 2 посту в теме.
 
 Top
dimka3210
Отправлено: 03 Апреля, 2011 - 00:40:12
Post Id


Новичок


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


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




Okula к сожалению почему то не получалось.
 
 Top
Okula
Отправлено: 03 Апреля, 2011 - 00:50:16
Post Id



Участник


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


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




dimka3210, потому что 2-ым параметром кодировку нужно указывать. Тогда всё получится.
 
 Top
dimka3210
Отправлено: 03 Апреля, 2011 - 00:51:41
Post Id


Новичок


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


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




Okula пишет:
dimka3210, потому что 2-ым параметром кодировку нужно указывать. Тогда всё получится.

Возьму на заметку. Спасибо за хитрость) Теперь сожалею что раньше не использовал форум для обучения).
 
 Top
Okula
Отправлено: 03 Апреля, 2011 - 00:55:23
Post Id



Участник


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


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




Описание к функциям нужно внимательнее читать. Улыбка
 
 Top
Мелкий Супермодератор
Отправлено: 03 Апреля, 2011 - 01:09:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




dimka3210 пишет:
Возьму на заметку. Спасибо за хитрость) Теперь сожалею что раньше не использовал форум для обучения).

Либо же mb_internal_encoding, тогда будет действовать на весь скрипт.


-----
PostgreSQL DBA
 
 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