стрип-тэги — конвертируйте HTML-страницу в обычный текст, используя переполнение стека

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

Я должен быть в состоянии сделать это на моем локальном хосте (сервер xampp) с любым URL, но сейчас я хотел бы использовать этот URL, чтобы убрать теги, поскольку это настолько грязный, что он может получить: http://static.anaf.ro/static/10/Timis/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's 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 );
}

1

Решение

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

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's 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's 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 может помочь 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]