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() и mb_strlen()?
В итоге, у нас во всех строках фактически 10 символов, но правильное их кол-во считается только тогда, когда файл в кодировке ANSI. Я знаю, что utf8 занимает 2 байта в памяти, но фактически это же 1 символ, так почему же сцука спец. для этого написанная функция mb_strlen() все равно возвращает мне 11 символов, вместо десяти фактических?
P.S.
В линуксе при создание файла посредством команды touch encoding_test.php и последующей записи в него кода с помощью nano, тоже считает что в строке 'ш123456789' - 11 символов.
Panoptik
Отправлено: 29 Октября, 2014 - 13:12:20
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
nkl пишет:
знаю, что utf8 занимает 2 байта в памяти, но фактически это же 1 символ
ну правильно, только нужно знать что strlen считает байты, а не символы. Для юникода есть mb_* функции (Добавление)
Сейчас посмотрел, в документации это написано http://php.net/manual/ru/function.strlen.php
Цитата:
Замечание:
Функция strlen() возвратит количество байт, а не число символов в строке.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
esterio
Отправлено: 29 Октября, 2014 - 16:01:01
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.