Как посчитать кол-во символов? (UTF-8)

Тема в разделе "PHP", создана пользователем the_stalker, 23 апр 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Столкнулся с проблемой:
    функция strlen для текста в UTF-8 выдает значение в 2 раза (примерно) превышающее реальное значение кол-ва символов.

    Потом вспомнил, что юникод занимает гораздо больше памяти, чем обычный текст в ISO-8859 например.

    Как посчитать кол-во символов, а не байтов?
     
  2. able

    able

    Регистр.:
    5 апр 2008
    Сообщения:
    226
    Симпатии:
    66
    ну так навскидку
    strlen(iconv("UTF-8","cp1251",$str));
     
  3. masto

    masto Прохожие

    бред какой-то, только что проверил - всё нормально считает.

    PHP случайно не 4?
     
  4. able

    able

    Регистр.:
    5 апр 2008
    Сообщения:
    226
    Симпатии:
    66
    masto, ну в теории -- да, на то он и strlen, чтобы количество символов возврашать, а не количество занимаемой памяти.
    но я на всякий привёл пример перекодироавния.
     
  5. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    ТС, не может быть такого... проверили на непечатаемые символы (\n,\r,\t)?
     
  6. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Все перепроверял
    Я слыхал что юникод гораздо больше занимает памяти ведь он поддерживает на порядок больше символов.

    Блин, как вы проверяете что у вас все нормально выходит?
     
  7. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Причем тут размер памяти? Тебе ведь количество символов нужно.

    Если на ламерский переводить - то количество машин песка тебе нада, а ты меряешь в тоннах песок :)
     
  8. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Выходит что strlen() именно кол-во байтов меряет
    других объяснений у меня нет
     
  9. able

    able

    Регистр.:
    5 апр 2008
    Сообщения:
    226
    Симпатии:
    66
    Тогда пользуйтесь iconv, как я выше описал.
    а вообще странные вещи вы говорите.

     
  10. masto

    masto Прохожие

    мысли:
    1. PHP ниже 5 версии
    2. в системе не установлена UTF-локаль.
    3. сервер указывает неверную кодировку текста.

    например слово 'тест' если нет поддержки UTF выглядит как 'тест', соответственно strlen() вернёт 8, а не 4.
     
Статус темы:
Закрыта.