echo mb_strlen('ффф'); //6
echo mb_strlen('fff'); //3
Все правильно, русские символы занимают 2 байта, а английские 1.Но нам надо унифицированно проверять длину входящей строки. Ответ прост:
echo mb_strlen('ффф','UTF-8'); //3
echo mb_strlen('fff','UTF-8'); //3
Главное, чтобы входящая строка была действительно в utf-8
14 коммент.:
Спасибо большое за такую простую статью! Пол часа бился над проблемой, а решение оказывается такое простое :)
Не забывайте, что BOM (byte order mark) тоже считается за символы в строке, соответствующим образом изменяя ее длину.
Cyrill, ну именно поэтому все стараются сохранять файлы в UTF-8 без BOM. )
спасибо
Спасибо.
Как проверить что строка действительно в UTF-8 ?
Для проверки кодировки существует функция mb_detect_encoding
всем пожалуйста
Пожалуйста )
Огромное Спасибо! Коротко,понятно и главное очень полезно!)
Поздравляю, вы — балбесы.
mb_internal_encoding("UTF-8");
и после этого mb_strlen и прочие начинают работать так, как ДОЛЖНЫ.
Аноним, а в чем балбесность-то?
Никакого костыля предложено не было, все в порядке. Ваш вариант, конечно же, тоже верный.
Благодарю))
Спасибо!
Отправить комментарий