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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Нужно слова текста поместить в массив(элемент массива = слово). Есть такой код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2013, 11:07
Ответы с готовыми решениями:

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

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

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

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

14
155 / 25 / 6
Регистрация: 06.06.2009
Сообщений: 262
08.02.2013, 15:13 2
У меня вообще не сработала функция str_word_count().
Можете попробовать воспользоваться другой функцией.
Например:
PHP
1
split ('[ /.,-?!]{1,}', $text)
0
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 9
08.02.2013, 15:22 3
а функция
PHP
1
$arr=explode(" ",$text);
0
155 / 25 / 6
Регистрация: 06.06.2009
Сообщений: 262
08.02.2013, 15:36 4
Зависит от того какие данные нужны. Знаки препинания или еще что.
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
08.02.2013, 15:43  [ТС] 5
Нужны исключительно слова. Не знаю почему у вас не сработла srt_word_count, странно. Она уже давно поддерживается.
Вроде бы дело в кодеровке. Но в WP все в UTF-8 и фалы я свои перепроверил, они тоже в UTF-8.
0
Заблокирован
08.02.2013, 16:05 6
Скорее всего, ваш браузер не видит и не знает какую кодировку применить...
Добавьте в раздел 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  [ТС] 7
На это я тоже внимание обратил, но WP (да если не указал я пишу плагин под него) и так ставит кодировку UTF-8 и браузер отображает страцу в этой кодеровке. И файлы я тоже перепроверил, там тоже UTF-8 без бома...
0
Заблокирован
08.02.2013, 16:22 8
Вы сделали, как я сказал? Надо именно так:
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 9
Странно у меня все работает отлично! А что у тебя отображает твоя переменная $content.
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
08.02.2013, 16:49  [ТС] 10
Спасибо за отзывчивость!
Вот что сделал:
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 11
Используйте альтернативные функции.

Добавлено через 17 минут
У меня функция str_word_count русские слова вообще не видит
Yапишите сами функцию, подобной str_word_count Не так это уж трудно
0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
09.02.2013, 16:21  [ТС] 12
Я надеялся в кой то веки воспользоваться готовыми решениями, которые любезно предоставляют нам разработчики PHP.
Но, как оказалось, что не только str_word_count(), но и strtolower(), да и вообще все функции связанные с обработкой строк - не работают с кирилицой. Спасибо им!)
Как все сделаю, выложу решение. Вдруг кому то поможет.
0
Заблокирован
09.02.2013, 22:22 13
Нашел решение )
Для 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
Taatshi
10.02.2013, 11:31
  #14

Не по теме:

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

0
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
11.02.2013, 10:02  [ТС] 15
Нет...нет...нет.
Вариант с UTF-8 тоже не работает. Причем работать он не будет до выхода в свет PHP 6. PHP просто не умеет работать со строками в формате UTF-8 (он бежит в панике если символ закодирован больше чем одним байтом). И если бы посмотреть пример выше (а вернее запустить его), то будет видно что нужная для работы локаль не устанавливается вовсе.
Вобщем много писать...для решения этой проблемы в нынешнем PHP есть костыль - библиотека mbstring. Кастыль - это плохо, но на мой взгляд, сейчас это оптимальный вариант.
0
11.02.2013, 10:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2013, 10:02
Помогаю со студенческими работами здесь

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

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

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

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

Работа с текстом
Доброе время суток! Попросили помочь с одной задачей, а т.к. я начал изучать пхп решил...

Работа с текстом
Доброго вечера. Прошу совета - задача простая , но хотелось бы услышать мнение коллег по...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru