Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
35 / 30 / 2
Регистрация: 31.12.2009
Сообщений: 349
1

Достать с сайта чистый текст

12.02.2011, 23:46. Просмотров 1774. Ответов 5
Метки нет (Все метки)

Вот нужно достать с сайтов чистый текст.
т.е без тегов, без комментариев, без содержания <head> и <noindex>

У меня сейчас две проблемы, как то не корректно вытаскивает текст. использую:

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
function strip_html_tags( $text )
{
    $text = preg_replace(
        array(
            // Remove invisible content
            '@<noindex[^>]*?>.*?</noindex>@siu',
            '@<head[^>]*?>.*?</head>@siu',
            '@<style[^>]*?>.*?</style>@siu',
            '@<script[^>]*?.*?</script>@siu',
            '@<object[^>]*?.*?</object>@siu',
            '@<embed[^>]*?.*?</embed>@siu',
            '@<applet[^>]*?.*?</applet>@siu',
            '@<noframes[^>]*?.*?</noframes>@siu',
            '@<noscript[^>]*?.*?</noscript>@siu',
            '@<noembed[^>]*?.*?</noembed>@siu',
 
            // Add line breaks before & after blocks
            '@<((br)|(hr))@iu',
            '@</?((address)|(blockquote)|(center)|(del))@iu',
            '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
            '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
            '@</?((table)|(th)|(td)|(caption))@iu',
            '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
            '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
            '@</?((frameset)|(frame)|(iframe))@iu',
        ),
        array(
            ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
            "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
            "\n\$0", "\n\$0",
        ),
        $text );
 
    // Remove all remaining tags and comments and return.
    return strip_tags( $text );
}
и проблема с file_get_contents и кодировками.

использую такую функцию:
PHP
1
2
3
4
function file_get_contents_utf8($fn) {
     $content = file_get_contents($fn);
      return mb_convert_encoding($content, 'UTF-8','auto');
}
но это только для utf8 а нужно и для других тоже...хотя бы 1251.

общая цель просмотреть сайт, так как его видит яндекс.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2011, 23:46
Ответы с готовыми решениями:

Достать контент (текст между тегами) из др. сайта
Здравствуйте! Есть небольшая проблема - не получается толково достать текст из др. сайта. Все что...

Как через lxml достать сразу текст тега и текст подтега?
Имеется такой html: &lt;h3&gt; &lt;a&gt;Text1&lt;span&gt;Text2&lt;/span&gt;&lt;/a&gt; &lt;/h3&gt; Как можно достать сразу и...

Перенос сайта с Joomla на чистый PHP без движка
Добрый день) Подскажите, плис, алгоритм переноса сайта с Jooml'ы на обычный php. С чего начать....

Где найти чистый дистрибутив Windows 7 ? (Ну может и не совсем чистый)
Помогите найти дистрибутив Windows 7 с данными параметрами ! 1)Полностью чистый но с...

5
112 / 55 / 13
Регистрация: 26.12.2010
Сообщений: 205
13.02.2011, 14:27 2
А не проще использовать базовую функцию?
PHP
1
strip_tags($text);
а для кодировки попробуйте
PHP
1
iconv("UTF-8", [ISO-8859-1], $text);
P.S.: в квадратных скобках, кодировка, которая вам нужна
0
35 / 30 / 2
Регистрация: 31.12.2009
Сообщений: 349
13.02.2011, 14:41  [ТС] 3
Цитата Сообщение от unsektor Посмотреть сообщение
А не проще использовать базовую функцию?
PHP
1
strip_tags($text);
а для кодировки попробуйте
PHP
1
iconv("UTF-8", [ISO-8859-1], $text);
P.S.: в квадратных скобках, кодировка, которая вам нужна

базовая функция не справляется.

iconv - как определить какая кодировка мне нужна? т.е какая кодировка на сайте?
0
112 / 55 / 13
Регистрация: 26.12.2010
Сообщений: 205
13.02.2011, 14:58 4
Цитата Сообщение от simply_denis Посмотреть сообщение
iconv - как определить какая кодировка мне нужна? т.е какая кодировка на сайте?
Если веб-сайт находится на веб-сервере, обычно кодировка передается заголовком
Примерно вот так:
Код
Content-type: text/html;charset=utf-8
Добавлено через 5 минут
Как его получить одно дело, как обработать - другое.

Допустим имеется заголовок
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    ...
    
    $str = "Content-type: text/html;charset=utf-8";
    
    // Выражение preg
    
    if (preg_match("~Content\-type\: (.*?)\;charset\=(.*?)~U", $str, $arg))
        {
            // $arg[1]  [=] text/html;
            // $arg[2]  [=] utf-8;
            
            $content    =   iconv($arg[2], "cp1251", $data)
            
        }
        
    ...
?>
1
35 / 30 / 2
Регистрация: 31.12.2009
Сообщений: 349
13.02.2011, 15:23  [ТС] 5
а вот как достать загаловки. За это спасибо!
Код
$url = 'http://www.example.com';

print_r(get_headers($url));

print_r(get_headers($url, 1));
а что делать с тегами???
0
112 / 55 / 13
Регистрация: 26.12.2010
Сообщений: 205
13.02.2011, 20:28 6
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
<?php 
// $document на выходе должен содержать HTML-документ. 
// Необходимо удалить все HTML-теги, секции javascript, 
// пробельные символы. Также необходимо заменить некоторые 
// HTML-сущности на их эквивалент. 
 
$search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезает javaScript 
                 "'<[\/\!]*?[^<>]*?>'si",           // Вырезает HTML-теги 
                 "'([\r\n])[\s]+'",                 // Вырезает пробельные символы 
                 "'&(quot|#34);'i",                 // Заменяет HTML-сущности 
                 "'&(amp|#38);'i", 
                 "'&(lt|#60);'i", 
                 "'&(gt|#62);'i", 
                 "'&(nbsp|#160);'i", 
                 "'&(iexcl|#161);'i", 
                 "'&(cent|#162);'i", 
                 "'&(pound|#163);'i", 
                 "'&(copy|#169);'i", 
                 "'&#(\d+);'e");                    // интерпретировать как php-код 
 
$replace = array ("", 
                  "", 
                  "\\1", 
                  "\"", 
                  "&", 
                  "<", 
                  ">", 
                  " ", 
                  chr(161), 
                  chr(162), 
                  chr(163), 
                  chr(169), 
                  "chr(\\1)"); 
 
$text = preg_replace($search, $replace, $document); 
?>
Добавлено через 10 секунд
Попробуйте ...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2011, 20:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обеспечить «распознавание» слов по наибольшему соответствию образцам и выдать «чистый» текст
Будьте добры помочь с таким вот заданием. Даны 50 слов различной длины. В тексте эти слова...

Достать значение с сайта
Всем привет. Я первый раз на данном форуме, в C# новичок. Ребят помогите: как достать значение...

Достать из .dll текст!
Как записать в .dll текст(в отдельном проекте), а затем из этой .dll(будет качаться новая...

Достать текст из скобок
Доброго времени суток, мне дан такой текст: Где вместо трех точек может быть любое кол-во текста,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.