php ламерский вопрос по подсчету символов.

12
siv1987
На сайте с 02.04.2009
Offline
427
#11

djdiplomat, strlen считает не символы а байты. В utf-8 символы кодируются несколькими байтами.

djdiplomat
На сайте с 05.08.2009
Offline
136
#12

А вот скажите, а вот если расширить этот код.

$text = 'Сегодня MXZ$@ доволен'; // 21 символ в переменной

echo mb_strlen($text,'UTF-8');

echo $text{20};

т.е 20-я буква "о" не выводится. как быть в таких случаях? по аналогии понимаю, что что-то с кодировкой тоже.... или я не прав?

siv1987
На сайте с 02.04.2009
Offline
427
#13
djdiplomat:
т.е 20-я буква "о" не выводится. как быть в таких случаях? по аналогии понимаю, что что-то с кодировкой тоже.... или я не прав?

Вам же говорят, для многобайтовых кодировок, нужно использовать соответствующие функции mb_*

SP
На сайте с 20.05.2008
Offline
56
#14
djdiplomat:
А вот скажите, а вот если расширить этот код.

$text = 'Сегодня MXZ$@ доволен'; // 21 символ в переменной
echo mb_strlen($text,'UTF-8');
echo $text{20};

т.е 20-я буква "о" не выводится. как быть в таких случаях? по аналогии понимаю, что что-то с кодировкой тоже.... или я не прав?

Может, Вам будет удобнее сначала сконверировать строку в другую кодировку? Если нужна многобайтная, то можно использовать, как написали выше, mb_... :

$text = 'Сегодня MXZ$@ доволен'; // 21 символ в переменной
mb_internal_encoding('UTF-8');
echo mb_strlen($text);
echo mb_substr($text, 20 - 1, 1);
Делаю небольшие заказы на php, perl, js/ajax, delphi; парсеры, простые сайты с админкой, установка\настройка sape, wordpress и др. Мой Блог (http://www.seoproger.ru)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий