С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75

Работа с текстом

08.02.2013, 11:07. Показов 2198. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Нужно слова текста поместить в массив(элемент массива = слово). Есть такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
function mas_change_content($content) {
    $text = $content;
    $text = strip_tags($text);
 
    echo "<hr>";
    echo "<pre>";
    print_r(str_word_count($text,1));
    echo "</pre>";
    echo "<hr>";
 
    return $content;
}
А результат примерно такой:
Array
(
[0] => WordPress�
[1] => -
[2] => один
[3] => и�
[4] => с�
[5] => м�
[6] => �
[7] => р�
[8] => спрос�
[9] => р�
[10] => ненн�
[11] => �
[12] => дви�
[13] => ков
[14] => д�
[15] => я
[16] => ведения
[17] => �
[18] => �
[19] => огов
[20] => �
[21] => подо�
[22] => н�
[23] => �

Вопрос, почуму появляются вопросительные знаки? И может быть у кого то есть опыт или прмер хорошего решения такой задачи.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2013, 11:07
Ответы с готовыми решениями:

Как посимвольно разобрать и обработать текст из RichEdit?
В общем, есть два окна RichEdit. В первое я ввожу текст, и после нажатия на Button, текст должен обработаться и вывестись в RichEdit2. Как...

Работа с текстом
Дан текст из строчных латинских букв, за которым следует точка. НАпечатать все буквы, входящие в текст оп одному разу.

Работа с текстом
Текст содержит не менее пяти заглавных букв Заменить заглавные буквы символом @ Заменить строчные буквы символом ? кому слабо?)

14
155 / 25 / 6
Регистрация: 06.06.2009
Сообщений: 262
08.02.2013, 15:13
У меня вообще не сработала функция str_word_count().
Можете попробовать воспользоваться другой функцией.
Например:
PHP
1
split ('[ /.,-?!]{1,}', $text)
0
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 9
08.02.2013, 15:22
а функция
PHP
1
$arr=explode(" ",$text);
0
155 / 25 / 6
Регистрация: 06.06.2009
Сообщений: 262
08.02.2013, 15:36
Зависит от того какие данные нужны. Знаки препинания или еще что.
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
08.02.2013, 15:43  [ТС]
Нужны исключительно слова. Не знаю почему у вас не сработла srt_word_count, странно. Она уже давно поддерживается.
Вроде бы дело в кодеровке. Но в WP все в UTF-8 и фалы я свои перепроверил, они тоже в UTF-8.
0
Заблокирован
08.02.2013, 16:05
Скорее всего, ваш браузер не видит и не знает какую кодировку применить...
Добавьте в раздел HEADER:
HTML5
1
<meta charset="utf-8">
Вот, что должно быть:
HTML5
1
2
3
4
5
6
7
8
<html>
<head>
<meta charset="utf-8">
</head>
<body>
Ваш код на PHP
</body>
</html>
P.S. По желанию можно добавить еще теги для удобства, например, title Ну, уже сами разберетесь)))
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
08.02.2013, 16:15  [ТС]
На это я тоже внимание обратил, но WP (да если не указал я пишу плагин под него) и так ставит кодировку UTF-8 и браузер отображает страцу в этой кодеровке. И файлы я тоже перепроверил, там тоже UTF-8 без бома...
0
Заблокирован
08.02.2013, 16:22
Вы сделали, как я сказал? Надо именно так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
// ...
function mas_change_content($content) {
    $text = $content;
    $text = strip_tags($text);
 
    echo "<hr>";
    echo "<pre>";
    print_r(str_word_count($text,1));
    echo "</pre>";
    echo "<hr>";
 
    return $content;
}
?>
</body>
</html>
P.S. Код не тестил... Нет под рукой средств... Завтра решу данную задачу и отпишу...
0
9 / 9 / 1
Регистрация: 02.09.2011
Сообщений: 70
08.02.2013, 16:32
Странно у меня все работает отлично! А что у тебя отображает твоя переменная $content.
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
08.02.2013, 16:49  [ТС]
Спасибо за отзывчивость!
Вот что сделал:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
    <head>
        <meta charset=UTF-8>        
    </head>
    <body>
        <?php>
            $text = "Схемы многобайтного кодирования символов и их реализации достаточно сложны, и их описание находится за пределами этой документации.";
            $arr = str_word_count($text, 1);
 
            echo "<pre>";
            print_r($arr);
            echo "</pre>";
        ?>
    </body>
</html>
Результат:
Array
(
[0] => С�
[1] => ем�
[2] => много�
[3] => �
[4] => �
[5] => �
[6] => ного
[7] => кодиров�
[8] => ния
[9] => симво�
[10] => ов
[11] => и
[12] => и�
[13] => ре�
[14] => �
[15] => и�
[16] => �
[17] => �
[18] => ии
[19] => дос�
[20] => �
[21] => �
[22] => о�
[23] => но
[24] => с�
[25] => о�
[26] => н�
[27] => и
[28] => и�
[29] => опис�
[30] => ние
[31] => н�
[32] => �
[33] => оди�
[34] => ся
[35] => �
[36] => �
[37] => преде�
[38] => �
[39] => ми
[40] => э�
[41] => о�
[42] => докумен�
[43] => �
[44] => �
[45] => ии
)
Получается что дело вовсе не в кодеровке. Неужели str_word_count() не умеет работать с русскими символами=(

Добавлено через 5 минут
Цитата Сообщение от jonatan Посмотреть сообщение
Странно у меня все работает отлично! А что у тебя отображает твоя переменная $content.
Вот пример (он выше). Где $text содержит несколко строк на русском.
И да с американскими символами все отлично работает, с русскими что то не так.
0
Заблокирован
09.02.2013, 16:10
Используйте альтернативные функции.

Добавлено через 17 минут
У меня функция str_word_count русские слова вообще не видит
Yапишите сами функцию, подобной str_word_count Не так это уж трудно
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
09.02.2013, 16:21  [ТС]
Я надеялся в кой то веки воспользоваться готовыми решениями, которые любезно предоставляют нам разработчики PHP.
Но, как оказалось, что не только str_word_count(), но и strtolower(), да и вообще все функции связанные с обработкой строк - не работают с кирилицой. Спасибо им!)
Как все сделаю, выложу решение. Вдруг кому то поможет.
0
Заблокирован
09.02.2013, 22:22
Нашел решение )
Для CP1251:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<html>
<head>
<meta charset="windows-1251">
<title>Веб-приложение</title>
</head>
<body>
<?php
// Список локалей, которые будут устанавливаться по порядкку
$locales   = array(    
                       "Russian_Russia.1251",
                    "ru_RU.CP1251",
                    "ru_RU.cp1251",
                    "ru_RU",
                    "RU",                    
                    "rus_RUS.1251"
                    );
 
$setFlag = false;
 
foreach ($locales as $localeName) {
    if ($setFlag === false) {
        // Выполняем установку локали
        setlocale(LC_ALL, $localeName);
    }
    // Провреряем, установлена ли локаль
    if ($setFlag === false && strtolower("qwertyёЁАБГДЯQWERTYZ") === "qwertyёёабгдяqwertyz") {
        // Локаль установлена корректно
        $setFlag = true;
        break;
    }
}
 
if ($setFlag !== true) {
    // Ошибка, локаль не установлена
    echo "<p>Fatal error: PHP can't setup locale to CP1251 character set (ru_RU.CP1251 for *nix 
 
OS, Russian_Russia.1251 for Windows OS). This locale is missing or operation system not supported 
 
it.</p><ul><li>To fix this error on Linux OS edit file /etc/locale.gen and add line 
 
<b>ru_RU.CP1251 CP1251</b> (or uncomment this line) and run <b>locale-gen</b> (root privileges 
 
required);</li><li>For Debian based Linux (Debian, Ubuntu etc...) use  <b>dpkg-reconfigure 
 
locales</b> command for configuring locales (root privileges required);</li><li>For FreeBSD use 
 
<b>locale-gen ru_RU.CP1251</b> (root privileges required);</li><li>For Windows OS install locale 
 
from Control pannel -> Languages and Regions section (administrator privileges 
 
required).</li></ul><p>Please contact with server administrator and notify him about this 
 
error</p>";
    exit();
}
 
setlocale(LC_NUMERIC, "C"); // for float numeric
 
// тестинГ)))
$txt = "Я ПрОвЕрАкА )))";
$res = strtolower($txt);
echo $res;
?>
</body>
</html>
я проверака )))
Для UTF8 (не проверял, но думаю, что работает )):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
// Set locale in UTF-8 Not supported in Windows
if (PHP_OS == "WINNT") {
    return 0;
}
 
// Список локалей, которые будут устанавливаться по порядкку
$locales   = array(    
                    "ru_RU.UTF8",
                    "Russian_Russia.65001",
                    "Russian_Russia.UTF8",
                    "ru_RU.UTF-8"
                    );
 
$setFlag = false;
 
foreach ($locales as $localeName) {
    
    if ($setFlag === false) {
        // Выполняем установку локали
        setlocale(LC_ALL, $localeName);
    }
    
    // Провреряем, установлена ли локаль
    if ($setFlag === false && 
            //(mb_strtolower("qwertyёЁАБГДЯQWERTYZ") === "qwertyёёабгдяqwertyz")
            //||
            preg_match("/^[а-яЁё]+$/ui", strftime("%a"))
            ) {
        // Локаль установлена корректно
        $setFlag = true;
        break;
    }
}
 
if ($setFlag !== true) {
    // Ошибка, локаль не установлена
    echo "<p>Fatal error: PHP can't setup locale to Russian UTF8 character set (ru_RU.UTF8 for *nix OS, Russian_Russia.65001 for Windows OS). This locale is missing or operation system not supported it.</p><ul><li>To fix this error on Linux OS edit file /etc/locale.gen and add line <b>ru_RU.UTF8 UTF8</b> (or uncomment this line) and run <b>locale-gen</b> (root privileges required);</li><li>For Debian based Linux (Debian, Ubuntu etc...) use  <b>dpkg-reconfigure locales</b> command for configuring locales (root privileges required);</li><li>For FreeBSD use <b>locale-gen ru_RU.UTF8</b> (root privileges required);</li><li>For Windows OS install locale from Control pannel -> Languages and Regions section (administrator privileges required).</li></ul><p>Please contact with server administrator and notify him about this error</p>";
    exit();
}
 
setlocale(LC_NUMERIC, "C"); // for float numeric
ini_set("mbstring.internal_encoding", "utf8");
 
?>
Твой код выше я протестил на CP1251:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<html>
<head>
<meta charset="windows-1251">
<title>Веб-приложение</title>
</head>
<body>
<?php
// Список локалей, которые будут устанавливаться по порядкку
$locales   = array(    
                       "Russian_Russia.1251",
                    "ru_RU.CP1251",
                    "ru_RU.cp1251",
                    "ru_RU",
                    "RU",                    
                    "rus_RUS.1251"
                    );
 
$setFlag = false;
 
foreach ($locales as $localeName) {
    if ($setFlag === false) {
        // Выполняем установку локали
        setlocale(LC_ALL, $localeName);
    }
    // Провреряем, установлена ли локаль
    if ($setFlag === false && strtolower("qwertyёЁАБГДЯQWERTYZ") === "qwertyёёабгдяqwertyz") {
        // Локаль установлена корректно
        $setFlag = true;
        break;
    }
}
 
if ($setFlag !== true) {
    // Ошибка, локаль не установлена
    echo "<p>Fatal error: PHP can't setup locale to CP1251 character set (ru_RU.CP1251 for *nix 
 
OS, Russian_Russia.1251 for Windows OS). This locale is missing or operation system not supported 
 
it.</p><ul><li>To fix this error on Linux OS edit file /etc/locale.gen and add line 
 
<b>ru_RU.CP1251 CP1251</b> (or uncomment this line) and run <b>locale-gen</b> (root privileges 
 
required);</li><li>For Debian based Linux (Debian, Ubuntu etc...) use  <b>dpkg-reconfigure 
 
locales</b> command for configuring locales (root privileges required);</li><li>For FreeBSD use 
 
<b>locale-gen ru_RU.CP1251</b> (root privileges required);</li><li>For Windows OS install locale 
 
from Control pannel -> Languages and Regions section (administrator privileges 
 
required).</li></ul><p>Please contact with server administrator and notify him about this 
 
error</p>";
    exit();
}
 
setlocale(LC_NUMERIC, "C"); // for float numeric
 
// тестинГ)))
$text = "Схемы многобайтного кодирования символов и их реализации достаточно сложны, и их описание 
 
находится за пределами этой документации.";
            $arr = str_word_count($text, 1);
 
            echo "<pre>";
            print_r($arr);
            echo "</pre>";
?>
</body>
</html>
Array
(
[0] => Схемы
[1] => многобайтного
[2] => кодирования
[3] => символов
[4] => и
[5] => их
[6] => реализации
[7] => достаточно
[8] => сложны
[9] => и
[10] => их
[11] => описание
[12] => находится
[13] => за
[14] => пределами
[15] => этой
[16] => документации
)
Отдельное спасибо Активисту. (правила форума не позволяют выложить источник)
1
10.02.2013, 11:31

Не по теме:

Цитата Сообщение от minforlife Посмотреть сообщение
правила форума не позволяют выложить источник
Если Вы цитируете чье-то решение - можно дать ссылку на исходную страницу, если, конечно, это не форум. Мы уважаем авторские права

0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
11.02.2013, 10:02  [ТС]
Нет...нет...нет.
Вариант с UTF-8 тоже не работает. Причем работать он не будет до выхода в свет PHP 6. PHP просто не умеет работать со строками в формате UTF-8 (он бежит в панике если символ закодирован больше чем одним байтом). И если бы посмотреть пример выше (а вернее запустить его), то будет видно что нужная для работы локаль не устанавливается вовсе.
Вобщем много писать...для решения этой проблемы в нынешнем PHP есть костыль - библиотека mbstring. Кастыль - это плохо, но на мой взгляд, сейчас это оптимальный вариант.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2013, 10:02
Помогаю со студенческими работами здесь

Работа с текстом
Здравствуйте. Допустим у меня есть переменная $row как сделать проверку его начинания с конкретной буквы.Допустим все которые начинаются...

Работа с текстом
Всем привет. Помогите написать программу на JAVA. Сам я в нем полный ноль. Суть программы вот в чем. Есть файл любого размера, программа...

Работа с текстом
Помогите переделать код, а то голова не варит уже. И не особо разбираюсь в Java. Суть задания такова: &quot;с текста убрать все слова...

Работа с текстом в VB
Народ помогите с кодом. Есть текстовый файл C:vip_kl.txt (формат Dos), Данные в файле см. ниже. Так как этот файл нам присылают, ...

Работа с текстом
Задача C++: Даны натуральное число n, символы s1 ...,sn.. Группы символов, разделенные пробелами (одним или несколькими) и не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru