Преобразование HTML-страницы в обычный текст с помощью PHP

0

Чтобы быть более точным, мне нужно иметь возможность сбрасывать HTML-теги так же хорошо, как этот скрипт: zubrag.com/tools/html-tags-stripper.php

Мне нужно иметь возможность сделать это на моем localhost (сервере xampp) с любым URL-адресом, но теперь я хотел бы использовать этот url для удаления тегов, так как это может быть бесполезным: http://static.anaf.ro/статический /10/Тимиш/Timis.htm

То, что у меня есть, не работает, и я не знаю, почему и как его исправить. Здесь был код: nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page

Я добавил эту строку в код, но он все равно не сработает...

$text = file_get_contents('http://static.anaf.ro/static/10/Timis/Timis.htm');

Ниже приведен необработанный код (обратите внимание, что исходный код не имеет строки сверху. Эта строка была добавлена мной)

/**
 * Copyright (c) 2008, David R. Nadeau, NadeauSoftware.com.
 * All rights reserved.
 * See:
 *  http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page
 */


$text = file_get_contents('http://static.anaf.ro/static/10/Timis/Timis.htm');

function strip_html_tags( $text )
{
    // PHP strip_tags() function will remove tags, but it
    // doesn't remove scripts, styles, and other unwanted
    // invisible text between tags.  Also, as a prelude to
    // tokenizing the text, we need to insure that when
    // block-level tags (such as <p> or <div>) are removed,
    // neighboring words aren't joined.
    $text = preg_replace(
        array(
            // Remove invisible content
            '@<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.
    echo strip_tags( $text );
}
  • 0
    Итак, где же вызов strip_html_tags( $your_text ) и каков его результат? Кроме того, вы понимаете, что показали нам только определение функции? И не показали вызов функции?
  • 0
    я забыл упомянуть, я не знаю php .. я просто новичок. HTML-страница для преобразования в простой текст будет являться ссылкой, включенной в вопрос, которая является static.anaf.ro/static/10/Timis/Timis.htm, за исключением того, что я не знаю, что должно быть включено в код .. на самом деле это то, что я надеюсь получить помощь ... по крайней мере, некоторые направления
Показать ещё 1 комментарий
Теги:
strip-tags

1 ответ

0
Лучший ответ

Он отлично работает, но регулярное выражение из ссылки в вашем сообщении не работает. Он не возвращает правильную кодировку, поэтому попробуйте следующее:

function strip_html_tags( $text )
{
    $text = preg_replace(
        array(
          // Remove invisible content
            '@<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 and after blocks
            '@</?((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 );
    return strip_tags( $text );
}

/* Read an HTML file */
$raw_text =  file_get_contents('http://static.anaf.ro/static/10/Timis/Timis.htm');

/* Get the file character encoding from a <meta> tag */
preg_match("/<meta[^>]+charset=['\"]?(.*?)['\"]?[\/\s>]/i", $raw_text, $matches );
$encoding = $matches[1];

/* Convert to UTF-8 before doing anything else */
$utf8_text = iconv( $encoding, "utf-8", $raw_text );

/* Strip HTML tags and invisible text */
$utf8_text = strip_html_tags( $utf8_text );

/* Decode HTML entities */
$utf8_text = html_entity_decode( $utf8_text, ENT_QUOTES, "UTF-8" );
echo $utf8_text;

Что я изменил:

Чтобы получить правильную кодировку, я просто заменил это

/* Get the file character encoding from a <meta> tag */
preg_match( '@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i', $raw_text, $matches );
$encoding = $matches[3];

с этим

preg_match("/<meta[^>]+charset=['\"]?(.*?)['\"]?[\/\s>]/i", $raw_text, $matches );
$encoding = $matches[1];

РЕДАКТИРОВАТЬ 1: Угадайте, что сценарий с веб-сайта имеет некоторые проблемы с удалением тегов из предоставленного вами URL-адреса. Это показывает много. Я думаю, что лучший способ стримить теги - это просто удалить все между открытием <и первым закрытием>. Но я не имею никакого представления о регулярном выражении на данный момент, может быть, Google мог бы помочь :)

  • 0
    хорошее исправление ... можем ли мы добавить несколько разрывов строк, чтобы сделать содержимое читабельным? PS извините за задержку с ответом, я пытался изучить функции :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню