За последние 24 часа нас посетили 16107 программистов и 1547 роботов. Сейчас ищут 893 программиста ...

Функция str_word_count() не находит русские слова...

Тема в разделе "Прочие вопросы по PHP", создана пользователем Yoko999, 8 июл 2014.

  1. Yoko999

    Yoko999 Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте. Работаю с Denwer, скачала пакет расширений (http://www.denwer.ru/packages/php5.html), чтобы работал cURL, установила, вроде, всё нормально.
    Используется библиотека "simple_html_dom". Код парсит сайт (на русском), находит заголовок страницы, затем весь текст со страницы (где $data - массив из элементов html-страницы):

    Код (Text):
    1.  
    2. ...
    3. $data = str_get_html(request($url));
    4. ...
    5. $title=count($data->find('title'))?strip_tags($data->find('title',0)->plaintext):'';//название страницы
    6. $text=strip_tags($data->plaintext);//текст со страницы
    Здесь всё нормально, в переменных то, что надо, проверяла.
    Затем нахожу все слова в тексте:

    Код (Text):
    1. $allwords=str_word_count($text,1);   //массив, содержащий все слова
    Вот что получается (текст на картинке - спарсенный текст, допустим, именно в нём нужно найти все слова):

    [​IMG]

    Раньше (до переустановки Денвера) функция работала как надо, то есть русские слова находились. Проблема начинается именно с этой функции...
    Есть мысль, что виновата кодировка. Но я перепробовала всё, до чего додумалась: и в phpMyAdmin меняла кодировки, и в самом скрипте, в основном, использовала UTF-8 и CP1251 (пробовала из одной в другую и наоборот), но бесполезно.

    Я уже замучилась =С Почему так происходит и что нужно сделать, чтобы не происходило?

    PS: если смущает размер текста, то и с "мелкими" то же самое =С
    (Надеюсь, тема подходит под раздел =\)

    Добавлено спустя 33 минуты 21 секунду:
    О! Лол... Так.... Вот уж не знаю, что за фигня вдруг произошла с этой функцией, потому что раньше и правда именно таким образом:
    Код (Text):
    1. $allwords=str_word_count($text,1);   //массив, содержащий все слова
    находились все слова, в том числе и русские...
    Но я сделала вот так:
    Код (Text):
    1. $allwords=str_word_count($text,1,'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя');
    и что-то зафурычило как надо:

    [​IMG]

    Ах, да... Не удивляйтесь процентам - вывожу процентное отношение встречи слов в тексте, а не их количество.

    Если ещё есть варианты по этому непонятному для меня происшествию, прошу предложить свои версии =\ Ну или как улучшить это, чтобы не перечислять весь алфавит? Может, в настройках сервера чего-то не хватает?
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Не могла она работать ранее без $charlist 3 аргумента функции.
    Сейчас то юник хромает у пыха, а ранее так вообще папандос был, так, что вы ошибаетесь.
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
  4. Yoko999

    Yoko999 Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    2
    Симпатии:
    0
    Но она правда работала... О_о

    Всем спасибо!
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Правильная мысль. И в вашем случае, скорее всего, что так оно и есть. Гадать где у вас прокол - это как пальцем в небо. Пробуйте задать внутреннюю кодировку: mb_internal_encoding(), в конце концов, попробовать использовать iconv(). Могу только посоветовать забыть про убогий Денвер и, как минимум, если не можете сами поднять сервер на локальной машине, то использовать нормальный инструмент для работы - Open Server
    P.S. А функция нормально работает