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 :: Версия для печати :: Количество символов в строке юникод
Форумы портала PHP.SU » » Кодировки и все смежное » Количество символов в строке юникод

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

1. MAXUS - 12 Ноября, 2014 - 11:41:51 - перейти к сообщению
Была такая тема, но не могу найти.

PHP:
скопировать код в буфер обмена
  1. $expr="10л!==1";
  2.  
  3. echo strlen($expr)."<br />";
  4. echo mb_strlen($expr)."<br />";


В обоих случаях возвращает 8.

PHP:
скопировать код в буфер обмена
  1. $expr="10w!==1";
  2.  
  3. echo strlen($expr)."<br />";
  4. echo mb_strlen($expr)."<br />";


В обоих случаях возвращает 7.

Понятно, что возвращается количество байт. Но не понятно тогда:
1. Чем mb_strlen отличается от strlen?
2. А как правильно найти количество символов в строке юникод?
2. Panoptik - 12 Ноября, 2014 - 11:49:55 - перейти к сообщению
мануалы читать умеем?

у mb_strlen есть второй параметр. передайте туда utf-8 и увидите результат
так же можно установить глобально mb_internal_encoding
3. MAXUS - 12 Ноября, 2014 - 12:02:44 - перейти к сообщению
Panoptik пишет:
мануалы читать умеем?

у mb_strlen есть второй параметр. передайте туда utf-8 и увидите результат
так же можно установить глобально mb_internal_encoding


Гран мерси, увери вел сенкью! Тыкнул в кармуУлыбка
4. esterio - 12 Ноября, 2014 - 13:12:11 - перейти к сообщению
MAXUS пишет:
Чем mb_strlen отличается от strlen?

потому как strlen считает количество байт в строке, а mb_strlen учитивает кодировку. cp1251 однобайтовая кодировка (один байт = один символ) strlen показивает верно количество. а вот UTF-8 уже многобайтовая (например кирилица в ней занимает 2 байта). вот получаеться что в UTF-8 количество байт != количество символов
5. MAXUS - 12 Ноября, 2014 - 15:59:37 - перейти к сообщению
esterio пишет:
MAXUS пишет:
Чем mb_strlen отличается от strlen?

потому как strlen считает количество байт в строке, а mb_strlen учитивает кодировку. cp1251 однобайтовая кодировка (один байт = один символ) strlen показивает верно количество. а вот UTF-8 уже многобайтовая (например кирилица в ней занимает 2 байта). вот получаеться что в UTF-8 количество байт != количество символов


Не. Это я понимаю. Я ступил почему mb_strlen выдает тот же результат, что и простая strlen. Как правильно сказали, не заглянул в описание функции, поэтому выполнял ее с кодировкой по умолчанию.

 

Powered by ExBB FM 1.0 RC1