PHP: получение alt у тега изображения

Раздел: Работа с медиа -> Обработка изображений

Получение атрибута alt из тега img в PHP

Как получить alt из HTML-строки с помощью DOMDocument?

Наиболее надёжный способ - использование встроенного расширения DOM. Оно корректно обрабатывает структуру HTML и извлекает атрибуты.

$html = '<img src="pic.jpg" alt="Описание картинки">';
$dom = new DOMDocument();
@$dom->loadHTML($html, LIBXML_NOERROR);
$xpath = new DOMXPath($dom);
$img = $xpath->query('//img')->item(0);
$alt = $img ? $img->getAttribute('alt') : '';
echo $alt;

Pictures php id (работа с изображениями в php)

Описание картинки

Php img alt (вывод атрибута alt изображения в php)

Возможные проблемы:

  • При отсутствии атрибута метод вернёт пустую строку. Рекомендуется проверять существование атрибута через hasAttribute('alt').
  • Если HTML содержит ошибки (незакрытые теги), может потребоваться @ для подавления предупреждений.
  • Символы в alt могут быть экранированы; DOM автоматически декодирует HTML-сущности.

Как извлечь alt регулярным выражением?

Для простых строк с гарантированно корректным форматом можно применить регулярное выражение. Метод быстр, но хрупок.

$html = '<img src="pic.jpg" alt="Описание" />';
preg_match('/alt="([^"]*)"/i', $html, $match);
$alt = $match[1] ?? '';
echo $alt;

Images php (изображения в php)

Описание

Color php (работа с цветами в php)

Регулярные выражения ломаются на:

  • кавычках внутри alt (напр. alt="Он сказал \"Привет\"")
  • порядке атрибутов (alt может быть перед src)
  • переводе строк внутри тега
  • использовании одинарных кавычек

Как получить alt через Simple HTML DOM Parser?

Сторонняя библиотека Simple HTML DOM упрощает синтаксис и похожа на jQuery. Подходит для проектов, где DOMDocument кажется громоздким.

include 'simple_html_dom.php';
$html = str_get_html('<img src="a.png" alt="Пример">');
$alt = $html->find('img', 0)->alt;
echo $alt;

Php png (создание png изображений с помощью gd в php)

Пример

Библиотека не входит в стандартную поставку PHP, её нужно устанавливать дополнительно. При работе с большими объёмами может быть медленнее DOMDocument.

Как получить alt из массива данных изображения (например, из базы данных)?

Если изображения хранятся в БД с отдельным полем alt, то извлечение сводится к SQL-запросу.

$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->query('SELECT alt FROM images WHERE id = 1');
$alt = $stmt->fetchColumn();
echo $alt;
Альтернативный текст

Поле может быть NULL - это нужно обрабатывать отдельно. Рекомендуется задавать значение по умолчанию (название файла или пустую строку).

Как получить alt из строки URL картинки (генерация на основе имени файла)?

Когда alt отсутствует, его можно сгенерировать. Например, преобразовать имя файла (без расширения) в удобочитаемый текст.

$src = 'images/golden_gate_bridge.jpg';
$filename = pathinfo($src, PATHINFO_FILENAME);
$alt = ucwords(str_replace('_', ' ', $filename));
echo $alt;
Golden Gate Bridge

Такой способ не даёт смыслового описания и подходит только как запасной вариант. Для SEO и доступности требуется ручное задание alt.

Расширенные примеры работы с атрибутом alt

Пример 1. Извлечение alt из нескольких изображений на странице с обработкой отсутствующих атрибутов.

Пример
$html = <<<HTML
<div>
  <img src="1.jpg" alt="Первое изображение">
  <img src="2.jpg">
  <img src="3.jpg" alt="">
</div>
HTML;

$dom = new DOMDocument();
@$dom->loadHTML($html, LIBXML_NOERROR);
$imgs = $dom->getElementsByTagName('img');
$alts = [];
foreach ($imgs as $img) {
    if ($img->hasAttribute('alt')) {
        $alt = $img->getAttribute('alt');
        $alts[] = $alt !== '' ? $alt : '(пустой alt)';
    } else {
        $alts[] = '(атрибут отсутствует)';
    }
}
print_r($alts);
Array
(
    [0] => Первое изображение
    [1] => (атрибут отсутствует)
    [2] => (пустой alt)
)

Пример 2. Извлечение alt из файла с помощью DOMDocument и XPath с учётом пространств имён (XHTML).

Пример
$file = 'page.xhtml';
$dom = new DOMDocument();
$dom->load($file);
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml');
$nodes = $xpath->query('//xhtml:img/@alt');
foreach ($nodes as $attr) {
    echo $attr->value . "\n";
}

Пример 3. Извлечение alt из строки с одинарными кавычками с помощью регулярного выражения повышенной устойчивости.

Пример
$html = "<img src='pic.jpg' alt='Котёнок \'Вася\'' />";
// Если используются одинарные кавычки, регулярное выражение усложняется
preg_match("/alt='([^']*(?:\\\\.|[^'])*)'/i", $html, $match);
$alt = strip_tags($match[1] ?? ''); // дополнительно удаляем возможные теги
echo $alt;
Котёнок 'Вася'

Регулярное выражение не учитывает экранирование обратным слешем внутри alt. В реальных проектах лучше использовать DOM.

Пример 4. Получение alt из базы данных с проверкой на NULL и заменой на имя файла.

Пример
$pdo = new PDO('sqlite:images.db');
$stmt = $pdo->query('SELECT filename, alt FROM images WHERE id = 42');
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$alt = $row['alt'] ?? '';
if (empty($alt)) {
    $alt = pathinfo($row['filename'], PATHINFO_FILENAME);
    $alt = ucfirst(str_replace(['-', '_'], ' ', $alt));
}
echo $alt;
product photo 2024

Пример 5. Извлечение alt из удалённого HTML-файла с помощью cURL и DOMDocument.

Пример
$url = 'https://example.com/gallery';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($ch);
curl_close($ch);

$dom = new DOMDocument();
@$dom->loadHTML($html, LIBXML_NOERROR);
$imgs = $dom->getElementsByTagName('img');
foreach ($imgs as $img) {
    $alt = $img->getAttribute('alt');
    echo $alt . "\n";
}
Фото пейзажа
Фото города

Пример 6. Извлечение alt и дополнительных атрибутов (title, data-alt) для последующего анализа.

Пример
$html = '<img src="img.jpg" alt="Официальное" title="Всплывающая подсказка" data-alt="Скрытое">';
$dom = new DOMDocument();
@$dom->loadHTML($html);
$img = $dom->getElementsByTagName('img')->item(0);
$result = [
    'alt' => $img->getAttribute('alt'),
    'title' => $img->getAttribute('title'),
    'data-alt' => $img->getAttribute('data-alt')
];
print_r($result);
Array
(
    [alt] => Официальное
    [title] => Всплывающая подсказка
    [data-alt] => Скрытое
)

Пример 7. Извлечение alt с помощью библиотеки DiDOM (альтернатива Simple HTML DOM).

Пример
require 'vendor/autoload.php';
use DiDom\Document;

$document = new Document('<img src="i.jpg" alt="Пример DiDOM">', true);
$img = $document->first('img');
echo $img->getAttribute('alt');
Пример DiDOM

Вывод атрибута alt изображения в PHP - comments

En
Php img alt (php)