Как получить значения изображения alt="..." в php?
Привет всем, я получил много наборов данных, показанных ниже (в переменной $code). Интересно, как я могу вывести все значения изображения alt="..."? Например, я хочу получить: Music Club (солнце) Music 09
от:
<img src="http://www.example.com/teststorage/episodes/11224/201.jpg" alt="Music Club ( sun ) Music 09" />
Примерный набор данных:
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12 item">
<div class="portfolio-item">
<a href="http://www.example.com/en/test/1234/11224/Music 09" title="Music Club ( sun ) Music 09" class="portfolio-item-link" >
<span class="portfolio-item-hover"></span>
<span class="fullscreen"><i class="icon-play"></i></span>
<img src="http://www.example.com/teststorage/episodes/11224/201.jpg" alt="Music Club ( sun ) Music 09" />
</a>
<div class="portfolio-item-title">
<a href="http://www.example.com/en/test/1234/11224/Music 09" title="Music Club ( sun ) Music 09" class="portfolio-item-link"><h4>Music 09</h4></a>
</div>
<div class="clearfix"></div>
</div>
</div>
3 ответа
Решение
Если вы действительно хотите использовать preg_match_all
Вы можете использовать следующий код.
<?php
$str = <<<END
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12 item">
<div class="portfolio-item">
<a href="http://www.example.com/en/test/1234/11224/Music 09" title="Music Club ( sun ) Music 09" class="portfolio-item-link" >
<span class="portfolio-item-hover"></span>
<span class="fullscreen"><i class="icon-play"></i></span>
<img src="http://www.example.com/teststorage/episodes/11224/201.jpg" alt="Music Club ( sun ) Music 09" />
</a>
<div class="portfolio-item-title">
<a href="http://www.example.com/en/test/1234/11224/Music 09" title="Music Club ( sun ) Music 09" class="portfolio-item-link"><h4>Music 09</h4></a>
</div>
<div class="clearfix"></div>
</div>
</div>
END;
preg_match_all('/<img(.*?)alt=\"(.*?)\"(.*?)>/si', $str, $out, PREG_SET_ORDER);
//see first output
var_dump($out);
/*
array(1) {
[0]=>
array(4) {
[0]=>
string(105) "<img src="http://www.example.com/teststorage/episodes/11224/201.jpg" alt="Music Club ( sun ) Music 09" />"
[1]=>
string(65) " src="http://www.example.com/teststorage/episodes/11224/201.jpg" "
[2]=>
string(27) "Music Club ( sun ) Music 09"
[3]=>
string(2) " /"
}
}
*/
//clean array
$alt = array();
foreach($out as $val) {
$alt[] = $val[2];
}
//see cleaned output
var_dump($alt);
/*
array(1) {
[0]=>
string(27) "Music Club ( sun ) Music 09"
}
*/
?>
Однако если вы хотите поступить правильно, я бы посмотрел на simple_html_dom. Вы можете сделать что-то вроде:
<?php
// Create DOM from URL or file
$html = file_get_html('http://www.example.com/page_i_want_to_spider.php');
// Find all images
foreach($html->find('img') as $element)
echo $element->alt . '<br>';
?>
С DOMDocument:
$dom = new DOMDocument();
@$dom->loadHTML($html);
$imgs= $dom->getElementsByTagName('img');
foreach ($imgs as $img) {
if ($img->hasAttribute('alt')) echo $img->getAttribute('alt') . '<br/>';
}
Если у вас есть HTML-код, как показано ниже, то вы можете сделать это так
$re = '/(alt)=("[^"]*")/';
$str = '<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12 item">\n <div class="portfolio-item">\n <a href="http://www.example.com/en/test/1234/11224/Music 09" title="Music Club ( sun ) Music 09" class="portfolio-item-link" >\n <span class="portfolio-item-hover"></span>\n <span class="fullscreen"><i class="icon-play"></i></span>\n <img src="http://www.example.com/teststorage/episodes/11224/201.jpg" alt="Music Club ( sun ) Music 09" />\n </a>\n <div class="portfolio-item-title">\n <a href="http://www.example.com/en/test/1234/11224/Music 09" title="Music Club ( sun ) Music 09" class="portfolio-item-link"><h4>Music 09</h4></a>\n </div>\n <div class="clearfix"></div>\n </div>\n </div>';
preg_match_all($re, $str, $matches);
выход:
[0] => Array
(
[0] => alt="Music Club ( sun ) Music 09"
)
[1] => Array
(
[0] => alt
)
[2] => Array
(
[0] => "Music Club ( sun ) Music 09"
)