Получить текстовое содержимое текущего URL в php - PullRequest
0 голосов
/ 27 июля 2011

Я работаю над URL Получить контент.

Если я хочу получить ТОЛЬКО текстовое содержание с этого сайта (только текст) http://en.wikipedia.org/wiki/Asia

Как это возможно. Я могу получить заголовок URL-адреса и URL-адрес с помощью PHP.

Я получил заголовок URL, используя следующий код:

$url = getenv('HTTP_REFERER');

$file = file($url);
$file = implode("",$file);

//$get_description = file_get_contents($url);

if(preg_match("/<title>(.+)<\/title>/i",$file,$m))
$get_title = $m[1];
echo $get_title;

Не могли бы вы помочь мне получить содержание.

Используя file_get_content, я мог получить только HTML-код. Любые другие возможности?

Спасибо - Haan

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Если вы просто хотите получить текстовую версию HTML-страницы, вам придется обрабатывать ее самостоятельно. Получите HTML (как вы, кажется, уже знаете, как это сделать), а затем обработайте его в виде обычного текста с помощью PHP.

Есть несколько подходов к этому. Первый - это htmlspecialchars (), который экранирует все специальные символы HTML. Я не думаю, что это то, что вы на самом деле хотите, но я подумал, что упомяну это для полноты.

Второй подход - это strip_tags (). Это полностью удалит весь HTML из документа HTML. Однако он не проверяет ввод, с которым он работает, он просто выполняет довольно простую замену текста. Это означает, что в итоге вы получите то, что вам может не понадобиться в текстовом представлении (например, содержимое раздела head или внутренности встроенного javascript и таблиц стилей)

Другой подход заключается в анализе загруженного HTML с помощью DOMDocument. Я не написал для вас код (у меня нет времени), но общая процедура будет выглядеть следующим образом:

  1. Загрузка HTML в объект DOMDocument
  2. Получить элемент тела документа и выполнить итерации по его дочерним элементам.
  3. Для каждого дочернего элемента, если рассматриваемый дочерний элемент является текстовым узлом, добавьте его в выходную строку. Если это не текстовый узел, то итерируйте его дочерние элементы, чтобы проверить, являются ли какие-либо его дочерние элементы текстовыми узлами (а если нет, то итерируйте эти дочерние элементы и т. Д.). Вы также можете проверить тип узла дальше. Например, если вы не хотите, чтобы в выводе были встроены javascript или css, вы можете проверить, что тип тега не STYLE или SCRIPT, и просто проигнорировать его, если он есть.

Приведенное выше описание легче всего реализовать как рекурсивную функцию (вызывающую себя).

Конечным результатом должна быть строка, содержащая только текстовое содержимое загруженной страницы без разметки.

РЕДАКТИРОВАТЬ: Забыли о strip_tags! Я обновил свой ответ, чтобы упомянуть это также. Я оставил свой подход DOMDocument включенным в мой ответ, потому что, как говорится в документации для strip_tags, он не проверяет разметку и ее обработку, тогда как DOMDocument пытается ее проанализировать (и потенциально может быть более устойчивым, если реализовано извлечение текста на основе DOMDocument Что ж).

1 голос
/ 27 июля 2011

Используйте file_get_contents для получения содержимого HTML, а затем strip_tags для удаления тегов HTML, оставляя только текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...