Получение и вывод заголовка страницы PHP

Как получить title страницы php

В PHP заголовок страницы задается через тег <title>, который помещается в секцию <head>. Для динамического формирования заголовка используют переменные или функции, чтобы учитывать содержимое страницы и SEO-параметры. Например, переменная $pageTitle может хранить название статьи или раздела сайта.

Как получить HTML-заголовок с помощью file_get_contents()

Для извлечения тега <title> страницы с помощью PHP можно использовать функцию file_get_contents(). Она считывает весь HTML-код страницы в виде строки, что позволяет выполнять поиск заголовка напрямую.

Пример базового кода:

$html = file_get_contents('https://example.com');

preg_match('/<title>(.*?)<\/title>/is', $html, $matches);

$title = $matches[1] ?? 'Заголовок не найден';

Этот подход использует регулярное выражение для поиска содержимого тега <title>. Флаг i делает поиск нечувствительным к регистру, а s позволяет точке . захватывать переносы строк.

Рекомендуется проверять, что $html успешно загружен, чтобы избежать ошибок:

if($html === false) {
  die('Не удалось получить страницу');
}

Для сайтов с UTF-8 стоит убедиться, что регулярное выражение корректно обрабатывает кодировку, либо использовать mb_convert_encoding() перед поиском:

$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');

Метод file_get_contents() подходит для статических страниц. Для динамически загружаемых заголовков через JavaScript лучше использовать инструменты типа cURL или headless-браузеры.

Итог: комбинация file_get_contents() и регулярного выражения обеспечивает быстрый и простой способ получения HTML-заголовка страницы без сторонних библиотек.

Использование DOMDocument для извлечения тега <title>

Класс DOMDocument позволяет загружать HTML и работать с его элементами напрямую. Для извлечения тега <title> сначала необходимо отключить предупреждения парсера, используя libxml_use_internal_errors(true), чтобы некорректный HTML не прерывал выполнение скрипта.

Пример корректного извлечения заголовка:


libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML($html);
$titleNodes = $doc->getElementsByTagName('title');
if ($titleNodes->length > 0) {
  $title = $titleNodes->item(0)->textContent;
  echo $title;
} else {
  echo 'Тег <title> не найден';
}

Класс DOMDocument подходит для работы с большими и сложными HTML-документами, так как позволяет обходить дерево узлов и получать любой тег, включая метаданные.

Рекомендации по использованию:

Проблема Решение
Некорректный HTML Вызывать libxml_use_internal_errors(true) перед loadHTML()
Отсутствие тега <title> Проверять $titleNodes->length перед обращением к item(0)
Кодировка Указывать loadHTML('' . $html) для корректного отображения символов
Выбор альтернативных тегов Использовать getElementsByTagName() для meta или h1, если нужно дополнительное описание страницы

Использование DOMDocument обеспечивает надежное извлечение заголовка без регулярных выражений и позволяет легко масштабировать скрипт для парсинга нескольких страниц одновременно.

Применение регулярных выражений для поиска заголовка страницы

Регулярные выражения в PHP позволяют извлекать содержимое тега <title> напрямую из HTML-кода. Для этого чаще всего используют функцию preg_match(), которая ищет соответствие шаблону в строке.

Пример базового шаблона для извлечения заголовка:

/<title>(.*?)<\/title>/is

Разбор шаблона: .*? обозначает минимальное соответствие любых символов, i игнорирует регистр тегов, s позволяет точке совпадать с переносами строк.

Пример использования в PHP:


$html = file_get_contents('https://example.com');
if (preg_match('/<title>(.*?)<\/title>/is', $html, $matches)) {
  $title = trim($matches[1]);
  echo $title;
}

Для страниц с потенциально некорректной разметкой рекомендуется использовать более гибкие шаблоны, учитывающие пробелы и атрибуты: /<title[^>]*>(.*?)<\/title>/is. Это гарантирует, что заголовок будет найден даже при неожиданных символах внутри тега.

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

Пример с использованием echo:

<?php
$title = "Моя страница";
echo "<h1>" . $title . "</h1>";
?>
  • Функция echo может принимать несколько аргументов через запятую: echo "<h1>", $title, "</h1>";.

Пример с использованием print:

<?php
$title = "Моя страница";
print "<h1>" . $title . "</h1>";
?>
  • print возвращает значение 1, что позволяет использовать его в выражениях, например: $status = print "<h1>Заголовок</h1>";.
  • Поддерживает только один аргумент за вызов, поэтому при необходимости объединять несколько строк используют конкатенацию через ..
  1. Выбирать print, если нужно вернуть значение и использовать его в логике скрипта.
  2. Всегда заключать HTML-теги в кавычки для корректного формирования структуры страницы.
  3. Для динамических заголовков использовать переменные, избегая прямой вставки статического текста, чтобы облегчить дальнейшую модификацию кода.

Получение заголовка удалённого сайта через cURL

Для извлечения заголовка страницы с удалённого сайта в PHP оптимально использовать библиотеку cURL. Этот метод позволяет получать HTML без загрузки внешних ресурсов, контролировать таймауты и заголовки запроса.

Пример базовой конфигурации cURL для получения заголовка:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html = curl_exec($ch);
curl_close($ch);
if ($html !== false) {
preg_match('/<title>(.*?)<\/title>/is', $html, $matches);
$title = $matches[1] ?? 'Заголовок не найден';
echo $title;
}
?>

Рекомендации для корректной работы:

  • Использовать CURLOPT_FOLLOWLOCATION для автоматического следования за редиректами.
  • Устанавливать CURLOPT_TIMEOUT, чтобы избежать зависания при медленных серверах.
  • Применять регулярное выражение с флагом i для нечувствительности к регистру тегов.
  • Проверять результат curl_exec, чтобы отличать ошибки соединения от пустого ответа.
  • При необходимости добавлять заголовки HTTP через CURLOPT_HTTPHEADER для обхода блокировок или эмуляции браузера.

Для более надёжного парсинга заголовка можно использовать DOMDocument:

<?php
$dom = new DOMDocument();
@$dom->loadHTML($html);
$title = $dom->getElementsByTagName('title')->item(0)?->textContent ?? 'Заголовок не найден';
echo $title;
?>

DOMDocument корректно обрабатывает HTML с различными кодировками и защищает от ошибок некорректной разметки, что делает его предпочтительным для сложных страниц.

Обработка ошибок при отсутствии тега <title>

При работе с PHP для извлечения заголовка страницы важно предусмотреть ситуацию, когда тег <title> отсутствует. Игнорирование этой проверки может привести к пустым значениями, некорректной обработке данных и сбоям в логике приложения.

Рекомендуется использовать функцию preg_match с проверкой результата. Если тег не найден, необходимо возвращать заранее определённое значение, например: ‘Заголовок отсутствует’ или null. Пример проверки:

PHP:


$html = file_get_contents('https://example.com');
if (preg_match('/<title>(.*?)<\/title>/is', $html, $matches)) {
  $title = $matches[1];
} else {
  $title = 'Заголовок отсутствует';
}

Также полезно логировать случаи отсутствия тега <title>, чтобы отслеживать нестандартные страницы и корректировать парсинг. Логирование можно вести в файл через error_log() или в базу данных для последующего анализа.

При использовании сторонних библиотек для парсинга HTML, таких как DOMDocument, рекомендуется проверять наличие элемента перед доступом к его содержимому, чтобы избежать Notice и Warning. Пример:


$dom = new DOMDocument();
@$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('title');
$title = $nodes->length ? $nodes->item(0)->textContent : 'Заголовок отсутствует';

В продакшн-среде лучше комбинировать оба метода: проверку регулярными выражениями для быстрого извлечения и DOMDocument для сложных случаев с вложенными тегами или нестандартной разметкой.

Вопрос-ответ:

Как получить заголовок HTML-страницы с помощью PHP?

Для извлечения заголовка HTML-страницы можно использовать функции работы с потоками или библиотеку DOM. Один из вариантов — загрузить содержимое страницы через file_get_contents() или cURL, затем создать объект DOMDocument и вызвать метод getElementsByTagName(‘title’), чтобы получить текст заголовка.

Можно ли получить заголовок страницы без загрузки всего HTML?

Да, в некоторых случаях можно ограничиться загрузкой только начальной части документа, где обычно находится тег title. Например, используя потоковый метод fopen() и чтение первых нескольких килобайт, можно извлечь тег title с помощью регулярного выражения. Однако этот способ не всегда надёжен, особенно если структура страницы сложная или нестандартная.

Как вывести заголовок страницы на экран после его получения?

После получения текста из тега title его можно вывести на экран стандартной функцией echo. Если заголовок может содержать специальные символы HTML, лучше обернуть его функцией htmlspecialchars(), чтобы корректно отобразить все символы и избежать ошибок в разметке.

Что делать, если страница не содержит тега title?

Если тег title отсутствует, методы DOM или регулярные выражения вернут пустой результат. В этом случае можно проверить результат на пустоту и использовать заглушку, например, вывести «Заголовок не найден». Также стоит учитывать, что некоторые страницы формируются динамически с помощью JavaScript, и заголовок может появиться только после выполнения скриптов, что PHP без дополнительных средств получить не сможет.

Ссылка на основную публикацию