55

この例では、SRC 属性を変数に取得したいと思います。

<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />

たとえば、変数を取得したいと思います$foo = "/images/image.jpg"。重要!src 属性はdynamicになるため、ハードコーディングしないでください。これを行うための迅速かつ簡単な方法はありますか?

ありがとう!

編集: 画像は、基本的にニュース記事のコンテンツである巨大な文字列の一部になります。なので画像はほんの一部です。

EDIT2: この文字列にはさらに多くの画像があり、最初の画像の src のみを取得したいと考えています。これは可能ですか?

4

7 に答える 7

116

次のような HTML パーサーを使用して、DOMDocument探している値を次のように評価しますDOMXpath

$html = '<img id="12" border="0" src="/images/image.jpg"
         alt="Image" width="100" height="100" />';

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"

または、本当にスペースを節約する必要がある人のために:

$xpath = new DOMXPath(@DOMDocument::loadHTML($html));
$src = $xpath->evaluate("string(//img/@src)");

そして、そこにあるワンライナーの場合:

$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));
于 2012-04-12T20:16:56.097 に答える
22

この種の HTML 解析には DOM パーサーを使用する方がよいでしょう。次のコードを検討してください。

$html = '<img id="12" border="0" src="/images/image.jpg"
         alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//img"); // find your image
$node = $nodelist->item(0); // gets the 1st image
$value = $node->attributes->getNamedItem('src')->nodeValue;
echo "src=$value\n"; // prints src of image

出力:

src=/images/image.jpg
于 2012-04-12T20:09:15.237 に答える
17

私はそれをより単純な方法で行いました。本来あるべきほどきれいではありませんが、簡単なハックでした

$htmlContent = file_get_contents('pageURL');

// read all image tags into an array
preg_match_all('/<img[^>]+>/i',$htmlContent, $imgTags); 

for ($i = 0; $i < count($imgTags[0]); $i++) {
  // get the source string
  preg_match('/src="([^"]+)/i',$imgTags[0][$i], $imgage);

  // remove opening 'src=' tag, can`t get the regex right
  $origImageSrc[] = str_ireplace( 'src="', '',  $imgage[0]);
}
// will output all your img src's within the html string
print_r($origImageSrc);
于 2012-11-28T20:43:12.257 に答える
13

HTMLを解析するために正規表現を使用するべきではないと人々が言うことは知っていますが、この場合、私はそれが完全に問題ないと思います。

$string = '<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />';
preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $string, $result);
$foo = array_pop($result);
于 2012-04-12T20:00:58.203 に答える
6
$imgTag = <<< LOB
<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />
<img border="0" src="/images/not_match_image.jpg" alt="Image" width="100" height="100" />
LOB;

preg_match('%<img.*?src=["\'](.*?)["\'].*?/>%i', $imgTag, $matches);
$imgSrc = $matches[1];

DEMO


注:正規表現ではなく、 HTMLパーサーを使用する必要がありますDOMDocument

于 2015-04-03T10:14:07.240 に答える
3
$str = '<img border="0" src=\'/images/image.jpg\' alt="Image" width="100" height="100"/>';

preg_match('/(src=["\'](.*?)["\'])/', $str, $match);  //find src="X" or src='X'
$split = preg_split('/["\']/', $match[0]); // split by quotes

$src = $split[1]; // X between quotes

echo $src;

他の正規表現を使用して、プルされた src タグが次のような画像であるかどうかを判断できます。

if(preg_match('/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/', $src) == 1) {
//its an image
}
于 2012-04-12T20:43:40.667 に答える
-1

2 つの簡単な解決策があります。

  1. HTML自体はxmlであるため、タグをXMLとしてロードし、その属性を完全に動的に取得する場合は、任意のXML解析方法を使用できます.domデータ属性(データ時間など).....
  2. http://mbe.ro/2009/06/21/php-html-to-array-working-one/ または php parse htmlのような php 用の html パーサーを使用して、 Google thisを配列します。
于 2012-04-12T20:09:38.547 に答える