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