Как получить метаданные из HTML-файла с помощью PHP?
Я пытаюсь создать функцию на своем веб-сайте, где пользователи могут загружать ссылки, такие как Digg. У меня есть код, который захватывает исходный код HTML из URL, который пользователь загружает на мой сайт, и сохраняет его в a .txt-файл. Затем я хочу захватить содержимое в теге
<meta name="content" description="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 ответа:
На самом деле все очень просто.
PHP предлагает собственное встроенное решение: http://php.net/manual/en/function.get-meta-tags.php
Большинство людей посоветуют вам использовать 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];
Это непроверено, но должно отлично работать в вашей ситуации.