Как получить метаданные из файла HTML с помощью PHP? - PullRequest
3 голосов
/ 18 марта 2012

Я пытаюсь создать функцию на своем веб-сайте, где пользователи могут загружать ссылки, например, Digg. У меня есть код, который берет исходный код HTML с URL-адреса, который пользователь загружает на мой веб-сайт, и сохраняет его в файле .txt. Затем я хочу захватить содержимое в теге

<meta name="content" description="GRAB THIS"> 

при условии, что этот тег существует. Иногда это работает, но иногда это не работает, даже несмотря на то, что исходный код для этой конкретной веб-страницы содержит необходимый метатег в точности, как я указал в своем коде. Я заметил, что это, кажется, не работает должным образом, если контент "GRAB THIS" содержит html-сущности (& и т. Д.). Пожалуйста, дайте мне знать, если у вас есть идеи, как заставить это работать. Вот мой код:

$html_data = file_get_contents( $path_to_txt_file_that_contains_html );
preg_match( '#<meta name="description" content="(.+?)">#si', $html_data, $tor;
$tor = str_replace ( '<meta name="description" content="' , "", $tor[0] );
$tor = str_replace ( '">', "", $tor );

Иногда $ tor по-прежнему содержит

<meta name="description" content="CONTENT"

но без закрытия>, поэтому мой код ломается, как только я помещаю это в базу данных mySQl. Есть идеи, что я делаю не так? Заранее спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Это на самом деле очень просто.

PHP предлагает собственное встроенное решение: http://php.net/manual/en/function.get-meta-tags.php

1 голос
/ 18 марта 2012

Большинство людей скажут вам использовать DomDocument для анализа html.Хотя я согласен в большинстве ситуаций, иногда просто проще использовать регулярные выражения.Так как вы используете регулярное выражение в своем вопросе, вот решение для регулярных выражений.

$html_data = file_get_contents( $path_to_txt_file_that_contains_html );
preg_match( '#<meta name="description".*content="([^"]+)">#siU', $html_data, $tor);
$tor = $tor[1];

Это не проверено, но должно работать нормально в вашей ситуации.

...