各投稿から最初の画像を取得しようとしています。以下のコードは、画像が1つしかない場合に最適です。しかし、私が複数持っている場合、それは私にイメージを与えますが、常に最初のものではありません。
私は本当に最初の画像だけが欲しいです。多くの場合、2番目の画像は次のボタンです
$texthtml = 'Who is Sara Bareilles on Sing Off<br>
<img alt="Sara" title="Sara" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>';
preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $texthtml, $matches);
$first_img = $matches [1] [0];
これで、この「$ first_img」を取得して、短い説明の前に貼り付けることができます
<img alt="Sara" title="Sara" src="<?php echo $first_img;?>"/>
最初のソースタグのみが必要な場合は、preg_match
の代わりにpreg_match_all
、これでうまくいきますか?
<?php
$texthtml = 'Who is Sara Bareilles on Sing Off<br>
<img alt="Sara" title="Sara" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>';
preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $texthtml, $image);
echo $image['src'];
?>
正規表現を使用してHTMLを解析しないでください。 phpqueryとして、html解析のlib/classを使用します。
require 'phpQuery-onefile.php';
$texthtml = 'Who is Sara Bareilles on Sing Off<br>
<img alt="Sarahehe" title="Saraxd" src="475993565.jpg"/><br>
<img alt="Sara" title="Sara two" src="475993434343434.jpg"/><br>';
$pq = phpQuery::newDocumentHTML($texthtml);
$img = $pq->find('img:first');
$src = $img->attr('src');
echo "<img alt='foo' title='baa' src='{$src}'>";
ここからの回答をテストした後 正規表現を使用してHTMLコードから最初の画像ソースを抽出しますか? 壊れたリンク画像が少ない方が、ここに提供されている回答よりも良い結果が得られました。
正規表現はさまざまなタスクに適していますが、通常、HTML DOMを解析する場合は不十分です。 HTMLの問題は、ドキュメントの構造が非常に変動するため、正確に(正確には、誤検知のない100%の成功率を意味する)タグを抽出することが難しいことです。
より一貫した結果を得るには、このオブジェクトを使用します http://simplehtmldom.sourceforge.net/ これにより、htmlを操作できます。私が投稿した最初のリンクの応答に例が示されています。
function get_first_image($html){
require_once('SimpleHTML.class.php')
$post_html = str_get_html($html);
$first_img = $post_html->find('img', 0);
if($first_img !== null) {
return $first_img->src';
}
return null;
}
楽しい
正規表現は常に最初のものと一致していますか?呼び出すたびに配列を出力してみてください。
error_log(var_export($matches, true));