UTF и str_word_count

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

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

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
    Доброе время суток.

    Пишу что то типа граббера. Считаю слова таким кодом.


    PHP:
    $str "лол 555 хай"
    $c str_word_count($str); 
    echo 
    $c
    Сохраняю php файл в кодировки UTF-8 (Unix)

    С английскими словами - всё на ура. А с русскими - неправильно считает кол-во слов.

    Как быть?
     
  2. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
    идешь на пхп.нет и смотришь комменты
    http://www.php.net/manual/en/function.str-word-count.php
    там кое что есть, думаю найдешь для себя... например
    PHP:
    <?php

    /**
     * Returns the number of words in a string.
     * As far as I have tested, it is very accurate.
     * The string can have HTML in it,
     * but you should do something like this first:
     *
     *    $search = array(
     *      '@<script[^>]*?>.*?</script>@si',
     *      '@<style[^>]*?>.*?</style>@siU',
     *      '@<![\s\S]*?--[ \t\n\r]*>@'
     *    );
     *    $html = preg_replace($search, '', $html);
     *
     */

    function word_count($html) {

      
    # strip all html tags
      
    $wc strip_tags($html);

      
    # remove 'words' that don't consist of alphanumerical characters or punctuation
      
    $pattern "#[^(\w|\d|\'|\"|\.|\!|\?|;|,|\\|\/|\-|:|\&|@)]+#";
      
    $wc trim(preg_replace($pattern" "$wc));

      
    # remove one-letter 'words' that consist only of punctuation
      
    $wc trim(preg_replace("#\s*[(\'|\"|\.|\!|\?|;|,|\\|\/|\-|:|\&|@)]\s*#"" "$wc));

      
    # remove superfluous whitespace
      
    $wc preg_replace("/\s\s+/"" "$wc);

      
    # split string into an array of words
      
    $wc explode(" "$wc);

      
    # remove empty elements
      
    $wc array_filter($wc);

      
    # return the number of words
      
    return count($wc);

    }
    ?>
     
  3. EugeneVC

    EugeneVC

    Регистр.:
    28 окт 2007
    Сообщения:
    297
    Симпатии:
    83
    есть несколько путей
    1) взять популярный фреймворк типа ZendFramework или Kohana - там это все есть - нужные функции.
    2) использовать функции с префиксом mb_, в твоем случае это
    Код:
    mb_strlen($name,'utf8')
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    EugeneVC, не находишь разницы между функциями mb_strlen() и str_word_count()?
     
Статус темы:
Закрыта.