Длина строки mb_strlen , utf-8 и русские буквы

понедельник, 21 июня 2010 г.

Давайте попробуем вывести рузультаты кода

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 коммент.:

Анонимный комментирует...

Спасибо большое за такую простую статью! Пол часа бился над проблемой, а решение оказывается такое простое :)

Cyrill комментирует...

Не забывайте, что BOM (byte order mark) тоже считается за символы в строке, соответствующим образом изменяя ее длину.

GIN комментирует...

Cyrill, ну именно поэтому все стараются сохранять файлы в UTF-8 без BOM. )

Анонимный комментирует...

спасибо

Анонимный комментирует...

Спасибо.

Анонимный комментирует...

Как проверить что строка действительно в UTF-8 ?

GIN комментирует...

Для проверки кодировки существует функция mb_detect_encoding

Анонимный комментирует...

всем пожалуйста

GIN комментирует...

Пожалуйста )

Анонимный комментирует...

Огромное Спасибо! Коротко,понятно и главное очень полезно!)

Анонимный комментирует...

Поздравляю, вы — балбесы.

mb_internal_encoding("UTF-8");

и после этого mb_strlen и прочие начинают работать так, как ДОЛЖНЫ.

GIN комментирует...

Аноним, а в чем балбесность-то?
Никакого костыля предложено не было, все в порядке. Ваш вариант, конечно же, тоже верный.

Анонимный комментирует...

Благодарю))

Анонимный комментирует...

Спасибо!

Copyright © 2010 WEB IT blog