Как уже говорилось в других ответах, либо стандартные потоковые функции PHP, либо cURL - ваш лучший выбор для извлечения HTML. Что касается удаления тегов, вот пара подходов:
Параметр # 1 : Используйте расширение Tidy, если оно доступно на вашем сервере, для рекурсивного обхода дерева документов и возврата текста из узлов. Примерно так:
function textFromHtml(TidyNode $node) {
if ($node->isText()) {
return $node->value;
} else if ($node->hasChildren()) {
$childText = '';
foreach ($node->child as $child)
$childText .= textFromHtml($child);
return $childText;
}
return '';
}
Возможно, вы захотите что-то более сложное, например, заменяющее теги <br />
(где $node->name == 'br'
) символами новой строки, но для начала это подойдет.
Затем загрузите текст HTML в объект Tidy и вызовите свою функцию на узле body. Если у вас есть содержимое в строке, используйте:
$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());
Опция # 2 : Используйте регулярные выражения, чтобы убрать все между <
и >
. Вы можете (и, вероятно, должны) разработать более сложное регулярное выражение, которое, например, соответствует только допустимым начальным или конечным тегам HTML. Любые ошибки в synax страницы, такие как случайная угловая скобка в основном тексте, могут привести к выводу мусора, если вы не будете осторожны. Вот почему Tidy так хорош (он специально разработан для очистки плохих страниц), но он может быть недоступен.