用PHP获取img src

我想在这个例子中将SRC属性变成一个variables:

<img border="0" src="http://img.dovov.comimage.jpg" alt="Image" width="100" height="100" /> 

所以例如 – 我想获得一个variables$foo = "http://img.dovov.comimage.jpg" 。 重要! src属性是dynamic的 ,所以不能硬编码。 有没有什么快捷的方法来做到这一点?

谢谢!

编辑:图像将成为一个巨大的string,基本上是一个新闻故事的内容的一部分。 所以图像只是其中的一部分。

编辑2:这个string中会有更多的图像,我只想得到第一个的src。 这可能吗?

使用像DOMDocument这样的HTMLparsing器,然后使用DOMXpath评估您正在查找的值:

 $html = '<img id="12" border="0" src="http://img.dovov.comimage.jpg" alt="Image" width="100" height="100" />'; $doc = new DOMDocument(); $doc->loadHTML($html); $xpath = new DOMXPath($doc); $src = $xpath->evaluate("string(//img/@src)"); # "http://img.dovov.comimage.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")); 

对于这种HTMLparsing,最好使用DOMparsing器。 考虑这个代码:

 $html = '<img id="12" border="0" src="http://img.dovov.comimage.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 

OUTPUT:

 src=http://img.dovov.comimage.jpg 

我用更简单的方式做了这件事,并不像应该那样干净,而是一个快速的黑客

 $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); 

我知道人们说,你不应该使用正则expression式来parsingHTML,但在这种情况下,我觉得它非常好。

 $string = '<img border="0" src="http://img.dovov.comimage.jpg" alt="Image" width="100" height="100" />'; preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $string, $result); $foo = array_pop($result); 
 $imgTag = <<< LOB <img border="0" src="http://img.dovov.comimage.jpg" alt="Image" width="100" height="100" /> <img border="0" src="http://img.dovov.comnot_match_image.jpg" alt="Image" width="100" height="100" /> LOB; preg_match('%<img.*?src=["\'](.*?)["\'].*?/>%i', $imgTag, $matches); $imgSrc = $matches[1]; 

DEMO


注意:您应该使用像DOMDocument的HTMLparsing器,而不是正则expression式。

 $str = '<img border="0" src=\'http://img.dovov.comimage.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; 

其他正则expression式的可以用来确定是否拉src标签是这样的图片:

 if(preg_match('/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/', $src) == 1) { //its an image } 

可能有两个简单的解决scheme:

  1. 它自己的HTML是一个XML,所以你可以使用任何XMLparsing方法,如果你加载标签作为XML,并获得其属性dynamic甚至DOM数据属性(如数据时间或任何东西)…..
  2. 使用任何PHPparsing器像http://mbe.ro/2009/06/21/php-html-to-array-working-one/或PHPparsingHTML来arrays谷歌这;