0 レビュー
2 回答
php-divから画像のURLを抽出する方法は?
PHPを使用してdivから背景画像のURLを抽出したい。文字列内のクラスを検索して、背景画像のURLを抽出したい。
例:
<div class="single-post-image" style="background-image: url(https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg)"></div>
これは私が望む出力です:
https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg
わからない
0
レビュー
答え :
解決策:
ストレート正規表現を使用することもできますが、個人的には、dom document / xpathを使用して後の要素だけを削り取り、スタイルから値を正規表現します。
<?php
$html = '
<html><head></head><body>
<div class="single-post-image" style="background-image:url(https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg)"></div>
<div class="single-post-image" style="background-image: url(https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg )"></div>
<div class="single-post-image" style="background-image: url( https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg)"></div>
<div class="single-post-image" style="background-image: url(\'https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg\')"></div>
<div class="single-post-image"></div>
</body>
</html>';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DomXPath($dom);
$images = [];
foreach ($xpath->query("//*[contains(@class, 'single-post-image')]") as $img) {
if ($img->hasAttribute('style')) {
preg_match('/url\((.*)\)/', $img->getAttribute('style'), $match);
if (isset($match[1])) $images[] = trim($match[1], '\'" ');
}
}
print_r($images);
結果:
Array
(
[0] => https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg
[1] => https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg
[2] => https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg
[3] => https://www.mmowg.net/wp-content/uploads/2020/11/a8Tnv1kVyXY.jpg
)
コードはもう少しありますが、大規模なHTMLドキュメントよりも堅牢で効率的であると信じています。
わからない
0
レビュー
答え :
解決策:
これは機能するはずです:
preg_match_all('/background-image: url\((.*?)\)/', $your_html, $output, PREG_SET_ORDER);
最後のパラメーターを変更して、好みの形式(配列)で出力を取得します。 https://www.php.net/manual/en/function.preg-match-all.php < / a>
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。